home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / util / boot / xinstall.lha / xInstall / xInstall14.asm < prev    next >
Assembly Source File  |  1992-09-02  |  59KB  |  2,780 lines

  1.  
  2. ******************************************************
  3. *                   XInstall v1.4                    *
  4. *          copyright © 1994 by Jens Tröger           *
  5. *                 all rights reserved                *
  6. ******************************************************
  7. *     take NO care for my english - it`s terrible    *
  8. ******************************************************
  9. *  Revision History:                                 *
  10. *     o first there was this idea...                 *
  11. *     o ...some simple tests and reading books...    *
  12. *     o v1.0 was born (oh what a hard work !!!!)     *
  13. *       but -#?§$/&- it doesn`t work without trouble *
  14. *     o v1.1 is the actually version (bugs ?? hope   *
  15. *       U will find nothing, but if so, don`t cry &  *
  16. *       let me know !)                               *
  17. *     o v1.2 goes WB                                 *
  18. *     o v1.2a: i modified the GTB-source (now faster *
  19. *       and no bugs -I hope-) [sorry, Jan], removed  *
  20. *       the terrible flicker at startup              *
  21. *     o v1.3 all error-messages are localized        *
  22. *     o v1.3a the localization failed (don`t know    *
  23. *       why !), but one bug killed, the string-gad   *
  24. *       goes colored when activated                  *
  25. *     o v1.3b still working on localization, some    *
  26. *       code optimized                               *
  27. *     o v1.3c now localized (thanks Oliver !!) and   *
  28. *       no trouble anymore (ON MY MACHINE)           *
  29. *     o v1.3d new workbench-startup, code more       *
  30. *       optimized                                    *
  31. *     o v1.4 GUI a little bit changed. Show and Read *
  32. *       added. Does not calc CheckSum when BB Empty  *
  33. *       is on.                                       *
  34. *     o v1.4a trouble with big proportional-fonts on *
  35. *       high resolution removed                      *
  36. ******************************************************
  37. *  Assembler:   DevPac v2.14d (tab 11)               *
  38. *               DevPac v3.04
  39. *  Books:       AMIGA intern, AMIGA Profi Know How,  *
  40. *               RKRM Libraries 3rd Ed.               *
  41. *  Help:        Holger Gzella (Scroller BB)          *
  42. *               Jan van den Baard (BackFill-Pattern) *
  43. *               !!! THANX A LOT !!!                  *
  44. *  Tester:      "PackMAN" Falk Zühlsdorff (27 n.D.)  *
  45. *               he`s the best Pas-Coder I know !!!   *
  46. *  Big Thanx:   Jan van den Bard for GadToolsBox     *
  47. *               (I created the Layout...)            *
  48. *  Thanx too:   all, I know                          *
  49. *  ...and:      Merci to Helloween for music (Great) *
  50. *               my girl Claudia for beeing there     *
  51. ******************************************************
  52. *      Bug-Reports, Suggestion, Money, ... to        *
  53. *                                                    *
  54. *                   Jens Tröger                      *
  55. *                   Jahnstr. 5                       *
  56. *                   08209 Auerbach/V                 *
  57. *                   GERMANY                          *
  58. *                                                    *
  59. ******************************************************
  60.  
  61.     opt    o+
  62.  
  63. dummy_tag        equ    $80000000
  64.  
  65. rt_window        equ    (dummy_tag+01)
  66. rt_reqpos        equ    (dummy_tag+03)
  67. rt_lockwindow    equ    (dummy_tag+13)
  68. rt_screentofront    equ    (dummy_tag+14)
  69. rt_underscore    equ    (dummy_tag+11)
  70. rtez_reqtitle    equ    (dummy_tag+20)
  71. rtez_flags        equ    (dummy_tag+22)
  72. rtfi_flags        equ    (dummy_tag+40)
  73. rtgs_allowempty    equ    (dummy_tag+80)
  74. rtgs_textfmt    equ    (dummy_tag+38)
  75.  
  76. gtst_string    equ    (dummy_tag+$8002d)
  77. gtcy_active    equ    (dummy_tag+$8000f)
  78.  
  79. loclea    MACRO            ; important for localized xInstall
  80.     pea.l    \1        ; thanx to ALEXANDER KOCHMANN
  81.     opt    w-        ; and OLIVER REIFF
  82.     bsr    get_string
  83.     opt    w+
  84.     move.l    (sp)+,\2
  85.     ENDM
  86.  
  87.  SECTION "xInstall_CODE",CODE
  88.  
  89. ; -----  first save command-line (if cli-start)
  90. ; -----  later it will be ignored...
  91.  
  92.     movem.l    d0/a0,-(sp)    ; length (d0) and adress (a0)
  93.                 ; of command-line
  94.  
  95. ; -----  Where did we start from ? CLI or WB...
  96.  
  97.     moveq    #0,d7
  98.     move.l    4.w,a6
  99.     sub.l    a1,a1        ; own task
  100.     jsr    -294(a6)        ; _LVOFindTask
  101.     move.l    d0,a0
  102.     move.l    d0,thistask
  103.     tst.l    172(a0)        ; pr_CLI (APTR to CLI-Struc)
  104.     bne.s    from_cli
  105. from_wb    lea.l    92(a0),a0        ; pr_MsgPort
  106.     jsr    -384(a6)        ; _LVOWaitPort
  107.     jsr    -372(a6)        ; _LVOGetMsg
  108.     move.l    d0,wbenchmsg
  109. from_cli    movem.l    (sp)+,d0/a0
  110.  
  111.     bsr.s    go_do_it
  112.  
  113.     tst.l    wbenchmsg
  114.     beq.s    exit
  115.     move.l    4.w,a6
  116.     jsr    -132(a6)        ; _LVOForbid
  117.     move.l    d7,a1
  118.     jsr    -378(a6)        ; _LVOReplyMsg
  119. exit    moveq    #0,d0
  120.     rts
  121.  
  122. ******************************************************
  123. *                   XInstall v1.4                    *
  124. *       this goes, when started from Workbench       *
  125. ******************************************************
  126.  
  127. go_do_it    
  128.  
  129. ; -----  check the Kick-Version: I need 2.0 or higher to run !!
  130.  
  131.     move.l    4.w,a6        ; need Kick 2.0 or higher
  132.     cmp.w    #37,$14(a6)    ; exec_SoftVer
  133.     blt    no_kick20
  134.  
  135.     move.l    #0,locbase        ; clear these pointers
  136.     move.l    #0,catalog
  137.  
  138. ; -----  open locale.library and xinstall.catalog to use localized strings
  139.  
  140. open_loc    move.l    4.w,a6
  141.     lea.l    loc_name,a1
  142.     moveq    #37,d0
  143.     jsr    -552(a6)        ; _LVOOpenLibrary
  144.     move.l    d0,locbase
  145.     beq.s    init_tderr
  146.     move.l    d0,a6
  147.     move.l    #0,a0
  148.     lea.l    cat_name,a1
  149.     move.l    #0,a2
  150.     jsr    -150(a6)        ; _LVOOpenCatalogA
  151.     move.l    d0,catalog
  152.  
  153. ; -----  now fill the td_errtab with pointers to the error-strings
  154.  
  155. init_tderr    lea.l    td_errtab,a5
  156.     loclea    err_txt1,(a5)+
  157.     loclea    err_txt2,(a5)+
  158.     loclea    err_txt3,(a5)+
  159.     loclea    err_txt4,(a5)+
  160.     loclea    err_txt5,(a5)+
  161.     loclea    err_txt6,(a5)+
  162.     loclea    err_txt7,(a5)+
  163.     loclea    err_txt8,(a5)+
  164.     loclea    err_txt9,(a5)+
  165.     loclea    err_txt10,(a5)+
  166.     loclea    err_txt11,(a5)+
  167.     loclea    err_txt12,(a5)+
  168.     loclea    err_txt13,(a5)+
  169.     loclea    err_txt14,(a5)+
  170.     loclea    err_txt15,(a5)+
  171.     loclea    err_txt16,(a5)+
  172.     loclea    err_txt17,(a5)+
  173.  
  174. ; -----  this will setup the localized gadgets (no more full 
  175. ; -----  key-selection available... sorry)
  176.  
  177.     loclea    gadget6txt,gad6_text
  178.     loclea    gadget7txt,gad7_text
  179.     loclea    gadget8txt,gad8_text
  180.     loclea    gadget9txt,gad9_text
  181.     loclea    bb1_text,gad0_lab
  182.     loclea    bb2_text,gad0_lab+4
  183.     loclea    bb3_text,gad0_lab+8
  184.     loclea    bb4_text,gad0_lab+12
  185.     loclea    bb5_text,gad0_lab+16
  186.     loclea    bb6_text,gad0_lab+20
  187.     loclea    fmt_text,scrl_tags+60
  188.  
  189. ; -----  now find the underscored letter of gadget`s text and use it
  190.  
  191. find_under    loclea    gadget6txt,a0
  192. .loop_1    cmp.b    #"_",(a0)+
  193.     beq.s    .found_1
  194.     cmp.b    #0,(a0)
  195.     beq.s    .search_2
  196.     bra.s    .loop_1
  197. .found_1    move.b    (a0),d0
  198.     move.b    d0,read_key1
  199.     cmp.b    #"a",d0
  200.     blt.s    .big_1
  201.     sub.b    #$20,d0
  202.     move.b    d0,read_key2
  203.     bra.s    .search_2
  204. .big_1    add.b    #$20,d0
  205.     move.b    d0,read_key2
  206.  
  207. .search_2    loclea    gadget7txt,a0
  208. .loop_2    cmp.b    #"_",(a0)+
  209.     beq.s    .found_2
  210.     cmp.b    #0,(a0)
  211.     beq.s    .search_3
  212.     bra.s    .loop_2
  213. .found_2    move.b    (a0),d0
  214.     move.b    d0,load_key1
  215.     cmp.b    #"a",d0
  216.     blt.s    .big_2
  217.     sub.b    #$20,d0
  218.     move.b    d0,load_key2
  219.     bra.s    .search_3
  220. .big_2    add.b    #$20,d0
  221.     move.b    d0,load_key2
  222.     
  223. .search_3    loclea    gadget8txt,a0
  224. .loop_3    cmp.b    #"_",(a0)+
  225.     beq.s    .found_3
  226.     cmp.b    #0,(a0)
  227.     beq.s    .search_4
  228.     bra.s    .loop_3
  229. .found_3    move.b    (a0),d0
  230.     move.b    d0,show_key1
  231.     cmp.b    #"a",d0
  232.     blt.s    .big_3
  233.     sub.b    #$20,d0
  234.     move.b    d0,show_key2
  235.     bra.s    .search_4
  236. .big_3    add.b    #$20,d0
  237.     move.b    d0,show_key2
  238.  
  239. .search_4    loclea    gadget9txt,a0
  240. .loop_4    cmp.b    #"_",(a0)+
  241.     beq.s    .found_4
  242.     cmp.b    #0,(a0)
  243.     beq.s    .done
  244.     bra.s    .loop_4
  245. .found_4    move.b    (a0),d0
  246.     move.b    d0,about_key1
  247.     cmp.b    #"a",d0
  248.     blt.s    .big_4
  249.     sub.b    #$20,d0
  250.     move.b    d0,about_key2
  251.     bra.s    .done
  252. .big_4    add.b    #$20,d0
  253.     move.b    d0,about_key2
  254. .done
  255.  
  256. ; -----  if started from CLI printout funny message (ha ha ha !!)
  257.  
  258.     tst.l    wbenchmsg
  259.     bne.s    open_rt
  260.  
  261. funny_out1    lea.l    dos_name,a1
  262.     moveq    #37,d0
  263.     move.l    4.w,a6
  264.     jsr    -552(a6)        ; _LVOOpenLibrary
  265.     cmp.l    #0,d0
  266.     beq.s    open_rt
  267.     move.l    d0,a6
  268.     jsr    -60(a6)        ; _LVOOutput
  269.     move.l    d0,d1
  270.     loclea    funny_msg1,a0
  271.     move.l    a0,d2
  272.     moveq    #0,d3
  273. .count_chr    cmp.b    #0,(a0)+
  274.     beq.s    .out
  275.     addq    #1,d3
  276.     bra.s    .count_chr
  277. .out    jsr    -48(a6)        ; _LVOWrite
  278.     move.l    a6,a1
  279.     move.l    4.w,a6
  280.     jsr    -414(a6)        ; _LVOCloseLibrary
  281.  
  282. ; -----  open reqtools.library  *** brilliant, Nico François **
  283.     
  284. open_rt    move.l    4.w,a6
  285.     lea.l    req_name,a1    ; open reqtools.library
  286.     moveq    #38,d0
  287.     jsr    -552(a6)        ; _LVOOpenLibrary
  288.     move.l    d0,reqbase
  289.     beq    no_reqlib        ; open failed -> end
  290.  
  291. ; -----  reqtoolsbase holds some "Needful things" (!!!)
  292.  
  293.     move.l    d0,a0
  294.     move.l    $2a(a0),intbase    ; rt_IntuitionBase
  295.     move.l    $2e(a0),gfxbase    ; rt_GfxBase
  296.     move.l    $32(a0),dosbase    ; rt_DOSBase
  297.     move.l    $36(a0),gadbase    ; rt_GadToolsBase
  298.  
  299. ; -----  alloc memory for BB
  300.  
  301.     move.l    #1024,d0        ; 1024 Bytes
  302.     move.l    #$10002,d1        ; MEMF_CHIP|MEMF_CLEAR
  303.     move.l    4.w,a6
  304.     jsr    -198(a6)        ; _LVOAllocMem
  305.     move.l    d0,bb_mem
  306.     beq    close_req        ; oh f... - no mem ???
  307.  
  308. ; -----  now open window (thanx to Jan van den Baard)
  309. ; -----  sorry, but I did big work on your code to make
  310. ; -----  it better (you know the bug !) and to add the 
  311. ; -----  pattern (thanx again) to the window
  312.  
  313. open_scr    bsr    setup_scr
  314.     cmp.l    #0,d0
  315.     beq.s    open_wnd
  316.     bra    scr_failed
  317. open_wnd    bsr    setup_wnd
  318.     cmp.l    #0,d0
  319.     beq.s    add_port
  320.     bra    wnd_failed
  321.  
  322. ; -----  add a port for device-operation
  323.  
  324. add_port    move.l    thistask,replyport+16
  325.     lea.l    replyport,a1
  326.     move.l    4.w,a6
  327.     jsr    -354(a6)        ; _LVOAddPort
  328.  
  329. ; -----  check for disk-drives
  330. ; -----  you can also FindTask() named "DF0", "DF1" etc, but I
  331. ; -----  try to open the trackdisk.device
  332.  
  333. check_drvs    move.l    gad_list,a3    ; disable Drive-Gads if not
  334.     moveq    #2,d0        ; mounted
  335. .loop    move.l    (a3),a3
  336.     dbra    d0,.loop        ; find Button DF0 (5th at GGList)
  337.     moveq    #0,d3
  338. .td_loop    bsr.s    .check_dev        ; loop 2 find out, which
  339.     move.l    (a3),a3        ; drive is on
  340.     addq.l    #1,d3
  341.     cmp.l    #3,d3
  342.     ble.s    .td_loop
  343.     bra.s    disable_gg
  344.  
  345. .check_dev    lea.l    track_name,a0    ; if OpenDevice fails, the 
  346.     lea.l    disk_io,a1        ; drive is not on
  347.     move.l    d3,d0
  348.     moveq    #0,d1
  349.     move.l    4.w,a6
  350.     jsr    -444(a6)        ; _LVOOpenDevice
  351.     cmp.l    #0,d0
  352.     beq.s    .device_on
  353.     move.l    a3,a0
  354.     move.l    window,a1
  355.     move.l    #0,a2
  356.     move.l    intbase,a6
  357.     jmp    -174(a6)        ; _LVOOffGadget
  358. .device_on    lea.l    disk_io,a1
  359.     jmp    -450(a6)        ; _LVOCloseDevice
  360.  
  361. ; ------  disable the FileSelect- and Read-Gadgets
  362.  
  363. disable_gg    lea    dis_tab,a1
  364.     moveq    #1,d2
  365. .loop2    move.l    (a1)+,d0
  366.     move.l    gad_list,a0
  367. .loop1    move.l    (a0),a0
  368.     dbra    d0,.loop1
  369.     move.l    a0,getfile_1
  370.     movem.l    a1,-(sp)
  371.     move.l    window,a1
  372.     move.l    #0,a2
  373.     move.l    intbase,a6
  374.     jsr    -174(a6)        ; _LVOOffGadget
  375.     movem.l    (sp)+,a1
  376.     dbra    d2,.loop2
  377.  
  378. ; -----  write window-ptr to requester-tags and process-structure
  379.  
  380.     move.l    window,about_tags+4    ; WindowPtr 4 rtRequesters
  381.     move.l    window,freq_tags+4
  382.     move.l    window,scrl_tags+4
  383.     move.l    thistask,a0
  384.     move.l    window,$b8(a0)    ; pr_WindowPtr
  385.  
  386. ; -----  wait for message
  387.  
  388. get_msg    move.l    4.w,a6
  389.     move.l    window,a0        ; wait 4 IDCMP-Message
  390.     move.l    $56(a0),a0        ; wd_UserPort --> a0
  391.     move.l    a0,a2
  392.     jsr    -384(a6)        ; _LVOWaitPort
  393.     move.l    a2,a0
  394.     move.l    gadbase,a6
  395.     jsr    -72(a6)        ; _LVOGT_GetIMsg
  396.     move.l    d0,a1
  397.     move.l    $14(a1),d0        ; im_Class d0
  398.     move.w    $18(a1),d1        ; im_Code d1
  399.     move.l    $1c(a1),d2        ; im_IAdress d2
  400.     movem.l    d0-d2,-(sp)
  401.     jsr    -78(a6)        ; _LVOGT_ReplyIMsg
  402.     movem.l    (sp)+,d0-d2
  403.  
  404.     cmpi.l    #$40,d0        ; IDCMP_GadgetDown
  405.     beq.s    gad_up
  406.     
  407.     cmpi.l    #$200000,d0    ; IDCMP_VanillaKey
  408.     beq.s    keypressed
  409.  
  410.     cmpi.l    #$200,d0        ; IDCMP_CloseWindow
  411.     beq.s    quit
  412.  
  413.     bra.s    get_msg
  414.  
  415. ; -----  jump to subroutines
  416.  
  417. gad_up    moveq    #0,d0        ; compute the adress to jump to
  418.     move.l    d2,a0
  419.     move.w    $26(a0),d0
  420.     lsl.l    #2,d0
  421.     lea.l    jmp_tab1,a0    ; see the table below
  422.     adda.l    d0,a0
  423.     move.l    (a0),a0
  424.     jmp    (a0)
  425.  
  426. keypressed    lea.l    jmp_tab2,a0    ; see table jmp_tab2
  427. .key_loop    move.b    (a0),d4
  428.     cmp.b    d1,d4
  429.     beq.s    .key_jump
  430.     cmp.b    #0,d4
  431.     beq.s    get_msg
  432.     lea.l    6(a0),a0
  433.     bra.s    .key_loop
  434. .key_jump    lea.l    2(a0),a0
  435.     move.l    (a0),a0
  436.     jmp    (a0)
  437.  
  438. ; -----  close window (press q to quit too)
  439.  
  440. quit    bsr    close_wnd
  441.     bsr    close_scr
  442.  
  443. ; -----  remove the port
  444.     
  445. rem_port    lea.l    replyport,a1
  446.     move.l    4.w,a6
  447.     jsr    -360(a6)        ; _LVORemPort
  448.  
  449. ; -----  free allocated memory
  450.  
  451. free_mem    move.l    bb_mem,a1
  452.     move.l    #1024,d0
  453.     move.l    4.w,a6
  454.     jsr    -210(a6)        ; _LVOFreeMemory
  455.  
  456. ; -----  close reqtools.library
  457.  
  458. close_req    move.l    reqbase,a1
  459.     move.l    4.w,a6
  460.     jsr    -414(a6)        ; _LVOCloseLibrary
  461.  
  462. ; -----  close locale.library 
  463.  
  464. no_reqlib    cmp.l    #0,catalog
  465.     beq.s    .close_loc
  466.     move.l    catalog,a0
  467.     move.l    locbase,a6
  468.     jsr    -36(a6)        ; _LVOCloseCatalog
  469. .close_loc    cmp.l    #0,locbase
  470.     beq.s    funny_out2
  471.     move.l    locbase,a1
  472.     move.l    4.w,a6
  473.     jsr    -414(a6)        ; _LVOCloseLibrary
  474.  
  475. ; -----  complete the very funny message
  476.  
  477. funny_out2    tst.l    wbenchmsg
  478.     bne.s    go_away
  479.  
  480. funny_out    lea.l    dos_name,a1
  481.     moveq    #37,d0
  482.     move.l    4.w,a6
  483.     jsr    -552(a6)        ; _LVOOpenLibrary
  484.     cmp.l    #0,d0
  485.     beq.s    go_away
  486.     move.l    d0,a6
  487.     jsr    -60(a6)        ; _LVOOutput
  488.     move.l    d0,d1
  489.     loclea    funny_msg2,a0
  490.     move.l    a0,d2
  491.     moveq    #0,d3
  492. .count_chr    cmp.b    #0,(a0)+
  493.     beq.s    .out
  494.     addq    #1,d3
  495.     bra.s    .count_chr
  496. .out    jsr    -48(a6)        ; _LVOWrite
  497.     move.l    a6,a1
  498.     move.l    4.w,a6
  499.     jsr    -414(a6)        ; _LVOCloseLibrary
  500.  
  501. ; -----  NOW quit away...
  502.  
  503. go_away    moveq    #0,d0
  504.     rts
  505.  
  506. ; -----  cry for help
  507.  
  508. scr_failed
  509. wnd_failed    move.l    reqbase,a1
  510.     move.l    4.w,a6
  511.     jsr    -414(a6)        ; _LVOCloseLibrary
  512.     move.l    locbase,a1
  513.     move.l    4.w,a6
  514.     jsr    -414(a6)        ; _LVOCloseLibrary
  515.  
  516. no_kick20    moveq    #20,d0        ; no Kick
  517.     rts
  518.     
  519. ; -----  CycleGad "Bootblock" selected...
  520.  
  521. bootblock1    move.b    d1,bb_id        ; ...by MousePtr
  522.     bra.s    bb_goon
  523.  
  524. bootblock2    cmp.b    #"B",d1        ; ...by Keyboard
  525.     beq.s    .down
  526. .up    addq.b    #1,bb_id        ; add (key "b") or sub 
  527.     cmp.b    #5,bb_id        ; (key "B") the CycleEntry
  528.     ble.s    .refresh        ; and refresh the Gadget
  529.     move.b    #0,bb_id
  530.     bra.s    .refresh
  531. .down    subq.b    #1,bb_id
  532.     cmp.b    #0,bb_id
  533.     bge.s    .refresh
  534.     move.b    #5,bb_id
  535. .refresh    lea.l    gtcy_act,a3
  536.     move.b    bb_id,7(a3)
  537.     move.l    gad_list,a0
  538.     move.l    (a0),a0
  539.     move.l    window,a1
  540.     move.l    #0,a2
  541.     move.l    gadbase,a6
  542.     jsr    -42(a6)        ; _LVOGT_SetGadgetAttrsA
  543.     
  544. bb_goon    cmp.b    #5,bb_id        ; enable Path if BB "(File)"
  545.     beq.s    .en_path
  546.     
  547. .dis_path    move.l    getfile_1,a0
  548.     move.w    $0c(a0),d0
  549.     btst    #8,d0        ; DISABLED-Bit already set ?
  550.     bne    get_msg        ; yoop -> don`t disable gadget
  551.     lea    dis_tab,a1
  552.     moveq    #1,d2
  553. .loop2    move.l    (a1)+,d0
  554.     move.l    gad_list,a0
  555. .loop1    move.l    (a0),a0
  556.     dbra    d0,.loop1
  557.     move.l    a0,getfile_1
  558.     movem.l    a1,-(sp)
  559.     move.l    window,a1
  560.     move.l    #0,a2
  561.     move.l    intbase,a6
  562.     jsr    -174(a6)        ; _LVOOffGadget
  563.     movem.l    (sp)+,a1
  564.     dbra    d2,.loop2
  565.     bra    get_msg
  566.     
  567. .en_path    lea    dis_tab,a1
  568.     moveq    #1,d2
  569. .loop4    move.l    (a1)+,d0
  570.     move.l    gad_list,a0
  571. .loop3    move.l    (a0),a0
  572.     dbra    d0,.loop3
  573.     move.l    a0,getfile_1
  574.     movem.l    a1,-(sp)
  575.     move.l    window,a1
  576.     move.l    #0,a2
  577.     move.l    intbase,a6
  578.     jsr    -186(a6)        ; _LVOOnGadget
  579.     movem.l    (sp)+,a1
  580.     dbra    d2,.loop4
  581.     bra    get_msg
  582.  
  583. ; -----  CycleGad "FileSystem" selected...
  584.     
  585. filesys1    move.b    d1,fs_id        ; ... MousePtr
  586.     bra    get_msg
  587.  
  588. filesys2    cmp.b    #"F",d1        ; ... Keyboard
  589.     beq.s    .down        ; same like bootblock2
  590. .up    addq.b    #1,fs_id        ; (see above)
  591.     cmp.b    #5,fs_id
  592.     ble.s    .refresh
  593.     move.b    #0,fs_id
  594.     bra.s    .refresh
  595. .down    subq.b    #1,fs_id
  596.     cmp.b    #0,fs_id
  597.     bge.s    .refresh
  598.     move.b    #5,fs_id
  599. .refresh    lea.l    gtcy_act,a3
  600.     move.b    fs_id,7(a3)
  601.     move.l    gad_list,a0
  602.     move.l    (a0),a0
  603.     move.l    (a0),a0
  604.     move.l    window,a1
  605.     move.l    #0,a2
  606.     move.l    gadbase,a6
  607.     jsr    -42(a6)        ; _LVOGT_SetGadgetAttrsA
  608.     bra    get_msg
  609.  
  610. ; -----  About-Requester
  611.  
  612. about    lea.l    about_tags,a0    ; only a simple About-Req
  613.     loclea    about_text,a1
  614.     lea.l    about_gad,a2
  615.     bsr    do_req
  616.     bra    get_msg
  617.  
  618. ; -----  any Drive-Button was pressed...
  619.  
  620. df0    moveq    #2,d0        ; ignore key if button...
  621.     bsr.s    get_ggptr        ; ...is disabled
  622.     move.w    $0c(a0),d0
  623.     btst    #8,d0        ; gg_Flags -> DISABLED
  624.     bne    get_msg
  625.     moveq    #0,d5
  626.     bra.s    inst_goon
  627.  
  628. df1    moveq    #3,d0
  629.     bsr.s    get_ggptr
  630.     move.w    $0c(a0),d0
  631.     btst    #8,d0        ; gg_Flags -> DISABLED
  632.     bne    get_msg
  633.     moveq    #1,d5
  634.     bra.s    inst_goon
  635.  
  636. df2    moveq    #4,d0
  637.     bsr.s    get_ggptr
  638.     move.w    $0c(a0),d0
  639.     btst    #8,d0        ; gg_Flags -> DISABLED
  640.     bne    get_msg
  641.     moveq    #2,d5
  642.     bra.s    inst_goon
  643.  
  644. df3    moveq    #5,d0
  645.     bsr.s    get_ggptr
  646.     move.w    $0c(a0),d0
  647.     btst    #8,d0        ; gg_Flags -> DISABLED
  648.     bne    get_msg
  649.     moveq    #3,d5
  650.  
  651. inst_goon    cmp.b    #3,bb_id
  652.     beq    scroll_bb
  653.     bra    do_install
  654.  
  655. get_ggptr    move.l    gad_list,a0    ; get ptr to Gadget (a0) with
  656. .loop    move.l    (a0),a0        ; ID -> d0
  657.     move.w    $26(a0),d1        ; gg_GadgetID
  658.     cmp.w    d0,d1
  659.     bne.s    .loop
  660.     rts
  661.  
  662. ; -----  get the Path of the BB-File to load
  663.  
  664. load    move.l    getfile_1,a0    ; if Gadget disabled -> ignore
  665.     move.w    $0c(a0),d0
  666.     btst    #8,d0        ; gg_Flags -> DISABLED
  667.     bne    get_msg
  668.     
  669.     move.l    bb_mem,a0
  670.     move.l    #1023,d0
  671. .loop1    move.b    #0,(a0)+
  672.     dbra    d0,.loop1
  673.  
  674.     move.l    reqbase,a6        ; get the Name & Path
  675.     moveq    #0,d0
  676.     move.l    d0,a0
  677.     jsr    -30(a6)        ; _LVOrtAllocRequestA
  678.     cmp.l    #0,d0
  679.     beq    get_msg
  680.     lea.l    freq_tags,a0
  681.     move.l    d0,a1
  682.     move.l    d0,d7
  683.     lea.l    freq_array,a2
  684.     loclea    freq_title,a3
  685.     jsr    -54(a6)        ; _LVOrtFileRequestA
  686.     cmp.l    #0,d0
  687.     bne.s    .copy_path
  688.     move.l    d7,a1
  689.     jsr    -36(a6)        ; _LVOrtFreeRequestA
  690.     bra    get_msg
  691.     
  692. .copy_path    lea.l    bb_path,a0        ; make complete Path
  693.     move.l    a0,a1
  694.     move.l    #255,d0
  695. .clr_loop    move.b    #0,(a1)+
  696.     dbra    d0,.clr_loop
  697.     move.l    d7,a1
  698.     move.l    $10(a1),a1
  699. .copy_loop    cmp.b    #0,(a1)
  700.     beq.s    .copy_file
  701.     move.b    (a1)+,(a0)+
  702.     bra.s    .copy_loop
  703. .copy_file    cmp.b    #":",-(a0)
  704.     beq.s    .file2path
  705.     lea.l    1(a0),a0
  706.     move.b    #"/",(a0)
  707. .file2path    lea.l    1(a0),a0
  708.     lea.l    freq_array,a1
  709. .copyloop2    cmp.b    #0,(a1)
  710.     beq.s    .path_done
  711.     move.b    (a1)+,(a0)+
  712.     bra.s    .copyloop2
  713. .path_done    move.l    getfile_1,a0    ; show Path in StringGad
  714.     move.l    window,a1
  715.     move.l    #0,a2
  716.     lea.l    stringtags,a3
  717.     lea.l    bb_path,a4
  718.     move.l    a4,4(a3)
  719.     move.l    gadbase,a6
  720.     jsr    -42(a6)        ; _LVOSetGadgetAttrA
  721.     move.l    reqbase,a6
  722.     move.l    d7,a1
  723.     jsr    -36(a6)        ; _LVOrtFreeRequestA
  724.  
  725. .load2bfr    move.l    dosbase,a6
  726.     move.l    #bb_path,d1
  727.     moveq    #-2,d2
  728.     jsr    -84(a6)        ; _LVOLock
  729.     tst.l    d0
  730.     bne.s    .go_exam
  731.     bra    .cant_lock        ; no lock - no file
  732.  
  733. .go_exam    move.l    d0,d5
  734.     move.l    d0,d1
  735.     move.l    #examine_bf,d2
  736.     jsr    -102(a6)        ; _LVOExamine
  737.     move.l    d5,d1
  738.     jsr    -90(a6)        ; _LVOUnLock
  739.     lea.l    examine_bf,a0
  740.     move.l    124(a0),d6
  741.     cmp.l    #1024,d6        ; FileSize greater than 1024 Bytes ?
  742.     bgt.s    .not_a_bb        ; yes --> no (Disk)-BB
  743.  
  744.     move.l    #bb_path,d1    ; open File 4 reading...
  745.     move.l    #1005,d2
  746.     jsr    -30(a6)        ; _LVOOpen
  747.     move.l    d0,d7
  748.     cmp.l    #0,d0
  749.     bne.s    .read_it
  750.     bra    .cant_open
  751.  
  752. .read_it    move.l    d0,d1        
  753.     move.l    bb_mem,d2
  754.     move.l    d6,d3
  755.     jsr    -42(a6)        ; _LVORead
  756.     cmp.l    d6,d0
  757.     bne    .read_err
  758.     
  759. .read_goon    move.l    d7,d1        ; ...and close File
  760.     jsr    -36(a6)        ; _LVOClose
  761.  
  762.     move.l    bb_mem,a0        ; is loaded file a BB ?
  763.     move.l    (a0),d0
  764.     move.l    d0,d1
  765.     and.l    #$ffffff00,d0
  766.     cmp.l    #$444f5300,d0    ; 1st Long "DOS",0 ?
  767.     beq.s    .lf_done
  768.     cmp.l    #"KICK",d1        ; 1st Long "KICK" ?
  769.     bne.s    .not_a_bb
  770.  
  771. .lf_done    bra    do_install
  772.  
  773. .not_a_bb    lea.l    about_tags,a0    ; ERROR: File no BB
  774.     loclea    err3_text,a1
  775.     loclea    err1_gad,a2
  776.     bsr    do_req
  777.     bra.s    .clr_bfr
  778.  
  779. .cant_lock    lea.l    about_tags,a0    ; ERROR: no lock
  780.     loclea    err1_text,a1
  781.     loclea    err1_gad,a2
  782.     bsr    do_req
  783.     bra.s    .clr_bfr
  784.     
  785. .cant_open    lea.l    about_tags,a0    ; ERROR: can`t open
  786.     loclea    err2_text,a1
  787.     loclea    err1_gad,a2
  788.     bsr    do_req
  789.     bra.s    .clr_bfr
  790.  
  791. .read_err    lea.l    about_tags,a0    ; ERROR: can`t read
  792.     loclea    err4_text,a1
  793.     loclea    err1_gad,a2
  794.     bsr    do_req
  795.  
  796. .clr_bfr    move.l    bb_mem,a0
  797.     move.l    #1023,d0
  798. .loop    move.b    #0,(a0)+
  799.     dbra    d0,.loop
  800.     bra    get_msg
  801.  
  802. ; -----  Scroller-BB needs a special Routine
  803.     
  804. scroll_bb    move.l    reqbase,a6        ; get Scroll-Text
  805.     moveq    #5,d0
  806.     move.l    #0,a0
  807.     jsr    -30(a6)        ; _LVOrtAllocRequestA
  808.     cmp.l    #0,d0
  809.     beq    get_msg
  810.     move.l    d0,d7
  811.     moveq    #49,d0
  812.     lea.l    scrl_tags,a0
  813.     lea.l    scrl_bufr,a1
  814.     lea.l    reqtitle,a2
  815.     move.l    d7,a3
  816.     jsr    -72(a6)        ; _LVOrtGetStringA
  817. .free_req    move.l    d0,d6
  818.     move.l    d7,a1
  819.     jsr    -36(a6)        ; _LVOrtFreeRequestA
  820.     cmp.l    #0,d6
  821.     beq    get_msg
  822.  
  823.     move.l    bb_mem,a0        ; copy BB to BBBuffer
  824.     lea.l    scroller,a1
  825.     move.l    #scroller_end-scroller-1,d0
  826. .copy_loop    move.b    (a1)+,(a0)+
  827.     dbra    d0,.copy_loop
  828.     
  829. ; -----  Install-Routine (will react to errors !)
  830.  
  831. ; in:    d5 - drive
  832. ; out:   -
  833.  
  834. do_install    movem.l    d0-d7/a0-a6,-(sp)
  835.     move.w    #3,dev_cmd
  836.     cmp.b    #3,bb_id
  837.     beq.s    .goon1
  838.     cmp.b    #5,bb_id
  839.     beq.s    .goon1
  840.     bsr    copy2bfr
  841. .goon1    move.l    bb_mem,a0
  842.     move.b    fs_id,3(a0)    ; don`t forget the FileSystem
  843.     bsr    calc_csm        ; and the CheckSum
  844.     move.l    show_gg,a0
  845.     move.w    $0c(a0),d0
  846.     btst    #7,d0
  847.     beq.s    do_device
  848.     bsr    show_bb
  849.     tst.l    d0
  850.     bne.s    do_device
  851.     move.l    bb_mem,a0
  852.     move.l    #255,d0
  853. .bfr_clr    move.l    #0,(a0)+        ; after writing clear the
  854.     dbra    d0,.bfr_clr    ; buffer
  855. .return    movem.l    (sp)+,d0-d7/a0-a6
  856.     bra    get_msg
  857.  
  858. ; -----  read/write bb from/to disk (read always unit 0)
  859.  
  860. do_device    lea.l    disk_io,a1
  861.     move.l    #replyport,14(a1)
  862.     move.l    d5,d0
  863.     moveq    #0,d1
  864.     lea.l    track_name,a0
  865.     move.l    4.w,a6
  866.     jsr    -444(a6)        ; _LVOOpenDevice
  867.     cmp.l    #0,d0
  868.     bne    .no_device
  869.     lea.l    disk_io,a1
  870.     move.w    dev_cmd,28(a1)    ; CMD_WRITE
  871.     move.l    bb_mem,40(a1)    ; write what ?
  872.     move.l    #1024,36(a1)    ; write 1024 Bytes
  873.     move.l    #0,44(a1)        ; start writing block 0
  874.     jsr    -456(a6)        ; _LVODoIO
  875.     cmp.l    #0,d0
  876.     bne.s    .io_failed        ; ooops - an error
  877.     move.w    #4,28(a1)        ; CMD_UPDATE (don`t forget !!)
  878.     jsr    -456(a6)        ; _LVODoIO
  879.     cmp.l    #0,d0
  880.     bne.s    .io_failed        ; ooops - another error
  881.     move.w    #9,28(a1)        ; CMD_MOTOR
  882.     move.l    #0,36(a1)
  883.     jsr    -456(a6)        ; _LVODoIO
  884.     cmp.l    #0,d0
  885.     bne.s    .io_failed        ; ooops - f... !!!
  886.     lea.l    disk_io,a1
  887.     jsr    -450(a6)        ; _LVOCloseDevice
  888.     cmp.w    #2,dev_cmd
  889.     beq.s    .return
  890. .done    move.l    bb_mem,a0
  891.     move.l    #255,d0
  892. .bfr_clr    move.l    #0,(a0)+        ; after writing clear the
  893.     dbra    d0,.bfr_clr    ; buffer
  894. .return    movem.l    (sp)+,d0-d7/a0-a6
  895.     bra    get_msg
  896.  
  897. .no_bb    loclea    err_txt4,a1    ; react to the errors
  898.     bra.s    .error_out
  899. .no_device    lea.l    err_txt1,a1
  900.     bra.s    .error_out
  901. .io_failed    move.l    d0,d7
  902.     move.w    #9,28(a1)        ; first CMD_MOTOR
  903.     move.l    #0,36(a1)
  904.     jsr    -456(a6)        ; _LVODoIO
  905.     move.l    d7,d0
  906.     sub.l    #19,d0
  907.     lsl.l    #2,d0
  908.     lea.l    td_errtab,a1    ; see the tab below
  909.     adda.l    d0,a1
  910.     move.l    (a1),a1
  911. .error_out    lea.l    about_tags,a0
  912.     lea.l    about_gad,a2
  913.     bsr    do_req
  914.     movem.l    (sp)+,d0-d7/a0-a6
  915.     bra    get_msg
  916.  
  917. ; -----  this will copy the boot-code to the install-buffer, if not
  918. ; -----  selected "Scroller" or "(File)"
  919.  
  920. copy2bfr    movem.l    a0/a1/d0,-(sp)
  921.     move.l    bb_mem,a0        ; first clear the buffer
  922.     move.l    #1023,d0
  923. .clr_loop    move.b    #0,(a0)+
  924.     dbra    d0,.clr_loop
  925.     moveq    #0,d0
  926.     move.b    bb_id,d0        ; calc adress and length of
  927.     lsl.l    #3,d0        ; Bootblock to copy (see table
  928.     lea.l    bb_table,a0    ; bb_table !)
  929.     adda.l    d0,a0
  930.     move.l    a0,a1
  931.     lea.l    4(a1),a1
  932.     move.l    (a0),a0
  933.     move.l    (a1),a1
  934.     suba.l    a0,a1
  935.     move.l    a1,d0
  936.     subq    #1,d0
  937.     move.l    bb_mem,a1
  938. .loop1    move.b    (a0)+,(a1)+    ; copy to buffer...
  939.     dbra    d0,.loop1
  940.     movem.l    (sp)+,a0/a1/d0
  941.     rts
  942.  
  943. ; -----  compute Check-Sum of BB
  944.  
  945. calc_csm    movem.l    a1/d0/d1,-(sp)    ; this way you calc BB`s CSum
  946.     cmp.b    #0,bb_id
  947.     beq.s    .all_done
  948.     move.l    bb_mem,a1
  949.     move.w    #$ff,d0
  950.     moveq    #0,d1
  951.     move.l    #0,4(a1)
  952. .add_loop    add.l    (a1)+,d1
  953.     bcc.s    .no_carry
  954.     addq.l    #1,d1
  955. .no_carry    dbra    d0,.add_loop
  956.     not.l    d1
  957.     bcc.s    .calc_done
  958.     addq.l    #1,d1
  959. .calc_done    move.l    bb_mem,a1
  960.     move.l    d1,4(a1)
  961. .all_done    movem.l    (sp)+,a1/d0/d1
  962.     rts
  963.  
  964. ; -----  setup rt_Requester 
  965.  
  966. ; IN    A0 ^TagList
  967. ;       A1 ^BodyText
  968. ;       A2 ^GadgetText
  969. ; OUT   D0 Nr. of Gadgets/-1($ff) if failed
  970.  
  971. do_req    movem.l    d1-d7/a0-a6,-(sp)
  972.     move.l    reqbase,a6
  973.     moveq    #5,d0
  974.     move.l    #0,a0
  975.     jsr    -30(a6)        ; _LVOrtAllocRequestA
  976.     cmp.l    #0,d0
  977.     beq.s    .failed
  978.     move.l    d0,d7
  979.     movem.l    28(sp),a0-a2
  980.     move.l    d7,a3
  981.     move.l    #0,a4
  982.     jsr    -66(a6)        ; _LVOrtEZRequestA
  983.     move.l    d0,d6
  984.     move.l    d7,a1
  985.     jsr    -36(a6)        ; _LVOrtFreeRequestA
  986.     move.l    d6,d0
  987.     movem.l    (sp)+,d1-d7/a0-a6
  988.     rts
  989. .failed    movem.l    (sp)+,d1-d7/a0-a6
  990.     moveq    #-1,d0
  991.     rts
  992.  
  993. ; -----  this will toggle the show-gadget
  994.  
  995. show    move.l    window,a0
  996.     move.l    show_gg,a1
  997.     move.l    intbase,a6
  998.     jsr    -228(a6)        ; _LVORemoveGadget
  999.     move.l    window,a0
  1000.     move.l    show_gg,a1
  1001.     eor.w    #$80,$0c(a1)    ; gg_Activation
  1002.     jsr    -42(a6)        _LVOAddGadget
  1003.     move.l    show_gg,a0
  1004.     move.l    window,a1
  1005.     move.l    #0,a2
  1006.     moveq    #1,d0
  1007.     jsr    -432(a6)        ; _LVORefreshGList
  1008.     bra    get_msg    
  1009.  
  1010. ; -----  the following code shows an ASCII-Dump of the actual bb
  1011. ; -----  using a reqtools-requester
  1012.  
  1013. show_bb    movem.l    d1/d2/d7/a0/a1/a2/a6,-(sp)
  1014.     move.l    4.w,a6        ; mem to show bootblock
  1015.     move.l    #1024+18+78,d0    ; bb: 1024 CR: 18 info: 78
  1016.     move.l    #$10001,d1
  1017.     jsr    -198(a6)        ; _LVOAllocMem
  1018.     tst.l    d0
  1019.     beq    .done
  1020.     move.l    d0,d7
  1021.     move.l    d0,a1
  1022.     loclea    show_text,a0    ; make head-information
  1023.     moveq    #77,d0
  1024. .loop0    move.b    (a0)+,(a1)+
  1025.     dbra    d0,.loop0
  1026.     move.l    d7,a1
  1027.     lea    25(a1),a1        ; 1st bb`s name
  1028.     moveq    #0,d0
  1029.     move.b    bb_id,d0
  1030.     lsl.l    #2,d0
  1031.     lea.l    gad0_lab,a0
  1032.     lea.l    (a0,d0.l),a0
  1033.     move.l    (a0),a0
  1034.     moveq    #-1,d0
  1035. .loop3    cmp.b    #0,(a0)+
  1036.     beq.s    .goon1
  1037.     addq.l    #1,d0
  1038.     bra.s    .loop3
  1039. .goon1    lea.l    -1(a0),a0
  1040. .loop4    move.b    -(a0),-(a1)
  1041.     dbra    d0,.loop4
  1042.     move.l    d7,a1        ; 2nd bb`s FileSystem
  1043.     lea    51(a1),a1
  1044.     moveq    #0,d0
  1045.     move.b    fs_id,d0
  1046.     lsl.l    #2,d0
  1047.     lea    gad1_lab,a0
  1048.     lea.l    (a0,d0.l),a0
  1049.     move.l    (a0),a0
  1050.     moveq    #-1,d0
  1051. .loop5    cmp.b    #0,(a0)+
  1052.     beq.s    .goon2
  1053.     addq.l    #1,d0
  1054.     bra.s    .loop5
  1055. .goon2    lea.l    -1(a0),a0
  1056. .loop6    move.b    -(a0),-(a1)
  1057.     dbra    d0,.loop6
  1058.     move.l    d7,a1        ; 3rd bb`s checksum
  1059.     lea    77(a1),a1
  1060.     move.l    bb_mem,a0
  1061.     move.l    4(a0),d0
  1062.     bsr.s    .bbbin2hex
  1063.     move.l    d7,a1        ; now copy the bb to the buffer...
  1064.     lea    78(a1),a1
  1065.     move.l    bb_mem,a0
  1066.     moveq    #15,d0        ; ...check for illegal ASCII...
  1067. .loop1    moveq    #63,d1
  1068.     move.b    #10,(a1)+
  1069. .loop2    move.b    (a0)+,(a1)
  1070.     cmp.b    #31,(a1)
  1071.     bgt.s    .goon4
  1072.     move.b    #".",(a1)
  1073. .goon4    lea.l    1(a1),a1
  1074.     dbra    d1,.loop2
  1075.     dbra    d0,.loop1
  1076.     lea.l    about_tags,a0    ; ...and setup the requester
  1077.     move.l    #0,ez_flags
  1078.     move.l    d7,a1
  1079.     loclea    show_gads,a2
  1080.     bsr    do_req
  1081.     move.l    d0,d2
  1082. .free_mem    move.l    d7,a1
  1083.     move.l    #1024+18+78,d0
  1084.     jsr    -210(a6)        ; _LVOFreeMem
  1085.     move.l    #4,ez_flags
  1086.     move.l    d2,d0
  1087. .done    movem.l    (sp)+,d1/d2/d7/a0/a1/a2/a6
  1088.     rts
  1089.  
  1090. .bbbin2hex    lea    hextab,a0        ; BIN: d0.l  HEX: -(a1)
  1091.     moveq    #7,d1
  1092. .loop    move.l    d0,d2
  1093.     and.l    #15,d2
  1094.     move.b    (a0,d2),-(a1)
  1095.     lsr.l    #4,d0
  1096.     dbra    d1,.loop
  1097.     rts
  1098.  
  1099. ; -----  reads the bootblock from df0: into the buffer
  1100.  
  1101. read    movem.l    d0-d7/a0-a6,-(sp)
  1102.     move.w    #2,dev_cmd        ; CMD_READ
  1103.     moveq    #0,d5        ; unit 0
  1104.     bra    do_device
  1105.  
  1106. ******************************************************
  1107. *   The following code is the modified GTB-Source.   *
  1108. *                                                    *
  1109. *   I know I should not patch it, but I did it for   *
  1110. *  faster work and the better "outfit" of my source. *
  1111. *        Now the executable is shorter too.          *
  1112. *                                                    *
  1113. *    Some bugs I killed (maybe I created some new)   *
  1114. *      and some superfluous commands I removed.      *
  1115. *                                                    *
  1116. *   Hope you will understand this, Jan. Sorry...     *
  1117. ******************************************************
  1118.  
  1119. ; -----  re-calculate the horizontal value for gadgets & bevel-boxes
  1120.  
  1121. compute_x    move.l    d1,-(sp)
  1122.     move.w    font_x,d1
  1123.     mulu    d1,d0
  1124.     addq.w    #4,d0
  1125.     lsr.w    #3,d0
  1126.     ext.l    d0
  1127.     move.l    (sp)+,d1
  1128.     rts
  1129.  
  1130. ; -----  re-calculate the vertikal value for gadgets & bevel-boxes
  1131.  
  1132. compute_y    move.l    d1,-(sp)
  1133.     move.w    font_y,d1
  1134.     mulu    d1,d0
  1135.     addq.w    #4,d0
  1136.     lsr.w    #3,d0
  1137.     ext.l    d0
  1138.     move.l    (sp)+,d1
  1139.     rts
  1140.  
  1141. ; -----  Calculate font`s size and check, if the window fits on the
  1142. ; -----  screen using screen`s font. If not, use topaz 8.
  1143.  
  1144. compute_font lea.l    attr,a0
  1145.     move.l    a0,font
  1146.     move.l    screen,a1
  1147.     lea.l    84(a1),a1        ; sc_RastPort
  1148.     move.l    52(a1),a1        ; rp_Font
  1149.     move.l    10(a1),(a0)    ; ?? (tf_Accessors)
  1150.     move.w    20(a1),4(a0)    ; tf_YSize
  1151.     move.w    20(a1),font_y    ; tf_YSize
  1152.  
  1153. .get_bigx    moveq    #100,d0        ; breitestes x-Zeichen finden
  1154.     moveq    #0,d1
  1155.     move.l    40(a1),a0        ; tf_CharSpace
  1156. .find_x    adda.l    #2,a0
  1157.     cmp.w    (a0)+,d1
  1158.     blt.s    .get_it
  1159.     dbra    d0,.find_x
  1160.     bra.s    .found
  1161. .get_it    move.w    -2(a0),d1
  1162.     dbra    d0,.find_x
  1163. .found    move.w    d1,font_x
  1164.  
  1165.     move.l    screen,a0
  1166.     move.b    36(a0),d0        ; sc_WBorLeft
  1167.     ext.w    d0
  1168.     move.w    d0,off_x
  1169.     move.l    40(a0),a1        ; sc_Font
  1170.     move.w    4(a1),d0        ; tf_XSize
  1171.     addq.w    #1,d0
  1172.     move.b    35(a0),d1        ; sc_WBorTop
  1173.     ext.w    d1
  1174.     add.w    d1,d0
  1175.     move.w    d0,off_y
  1176.     cmp.w    #0,d2
  1177.     beq.s    .comp_done
  1178.     cmp.w    #0,d3
  1179.     beq.s    .comp_done
  1180.     move.w    d2,d0
  1181.     bsr    compute_x
  1182.     add.w    off_x,d0
  1183.     move.b    37(a0),d1        ; sc_WBorRight
  1184.     ext.w    d1
  1185.     add.w    d1,d0
  1186.     cmp.w    12(a0),d0        ; sc_Width
  1187.     bhi.s    .use_topaz
  1188.     move.w    d3,d0
  1189.     bsr    compute_y
  1190.     add.w    off_y,d0
  1191.     move.b    38(a0),d1        : sc_WBorBottom
  1192.     ext.w    d1
  1193.     add.w    d1,d0
  1194.     cmp.w    14(a0),d0        ; sc_Height
  1195.     bhi.s    .use_topaz
  1196. .comp_done    rts
  1197. .use_topaz    move.l    font,a0
  1198.     move.l    #topaz_name,(a0)    ; ta_Name
  1199.     move.w    #8,font_y
  1200.     move.w    #8,font_x
  1201.     move.w    #8,4(a0)        ; ta_YSize
  1202.     rts
  1203.  
  1204. ; -----  get information about the active PubScreen
  1205.  
  1206. setup_scr    movem.l    d1-d3/a0-a2/a6,-(sp)
  1207.     move.l    intbase,a6
  1208.     move.l    pub_screen,a0
  1209.     jsr    -510(a6)        ; _LVOLockPubScreen
  1210.     move.l    d0,screen
  1211.     cmp.l    #0,d0
  1212.     beq.s    .s_error
  1213.     moveq    #0,d2
  1214.     moveq    #0,d3
  1215.     bsr    compute_font
  1216.     move.l    screen,a0
  1217.     move.l    gadbase,a6
  1218.     lea.l    vi_tags,a1
  1219.     jsr    -126(a6)        ; _LVOGetVisualInfoA
  1220.     move.l    d0,visualinfo
  1221.     beq.s    .v_error
  1222.     moveq    #0,d0
  1223. .done    movem.l    (sp)+,d1-d3/a0-a2/a6
  1224.     rts
  1225. .s_error    moveq    #1,d0
  1226.     bra.s    .done
  1227. .v_error    moveq    #2,d0
  1228.     bra.s    .done
  1229.  
  1230. ; -----  free the information
  1231.  
  1232. close_scr    movem.l    d0-d1/a0-a1/a6,-(sp)
  1233.     move.l    gadbase,a6
  1234.     move.l    visualinfo,a0
  1235.     cmpa.l    #0,a0
  1236.     beq.s    .no_vis
  1237.     jsr    -132(a6)        ; _LVOFreeVisualInfo
  1238.     move.l    #0,visualinfo
  1239. .no_vis    move.l    intbase,a6
  1240.     move.l    #0,a0
  1241.     move.l    screen,a1
  1242.     cmpa.l    #0,a1
  1243.     beq.s    .no_scr
  1244.     jsr    -516(a6)        ; _LVOUnlockPubScreen
  1245.     move.l    #0,screen
  1246. .no_scr    movem.l    (sp)+,d0-d1/a0-a1/a6
  1247.     rts
  1248.  
  1249. ; -----  draw the BackFill-Pattern (thanx Jan) and the BevelBox
  1250. ; -----  into the window
  1251.  
  1252. wnd_render    movem.l    d0-d5/a0-a2/a6,-(sp)
  1253.     move.l    window,a0
  1254.     bsr    .draw_ptrn
  1255.     move.l    window,a0
  1256.     move.w    wnd_width,d2
  1257.     move.w    wnd_height,d3
  1258.     bsr    compute_font
  1259.     move.l    visualinfo,bevel_tags+4
  1260.     move.l    gadbase,a6
  1261.     move.l    window,a0
  1262.     move.l    50(a0),a2        ; wd_RastPort
  1263.     move.l    a2,a0
  1264.     lea.l    bevel_tags,a1
  1265.     moveq    #3,d0
  1266.     bsr    compute_y
  1267.     add.w    off_y,d0
  1268.     move.l    d0,d1
  1269.     move.l    #418,d0        ; width of BevelBox
  1270.     bsr    compute_x
  1271.     move.l    d0,d2
  1272.     moveq    #42,d0        ; height of BevelBox
  1273.     bsr    compute_y
  1274.     move.l    d0,d3
  1275.     moveq    #7,d0        ; top edge of BevelBox
  1276.     bsr    compute_x
  1277.     add.w    off_x,d0
  1278.     bsr.s    .drawbevel
  1279.     movem.l    (sp)+,d0-d5/a0-a2/a6
  1280.     rts
  1281.  
  1282. ; -----  This is used instead of a simple DrawBevelBox(), because
  1283. ; -----  the BackFill-Pattern is still visible IN the BevelBox after
  1284. ; -----  DrawBevelBox(). So I have to clear the rect (using RectFill)
  1285. ; -----  IN the BevelBox before calling DrawBevelBox()
  1286.  
  1287. .drawbevel    movem.l    d0-d3/a0/a1/a6,-(sp)
  1288.     move.l    screen,a0
  1289.     move.l    intbase,a6
  1290.     jsr    -690(a6)        ; _LVOGetScreenDrawInfo
  1291.     move.l    d0,d6
  1292.     move.l    d0,a0
  1293.     move.l    $04(a0),a0        ; dri_Pens
  1294.     move.w    $0e(a0),d2        ; BACKGROUNDPEN
  1295.     move.l    screen,a0
  1296.     move.l    d6,a1
  1297.     jsr    -696(a6)        ; _LVOFreeScreenDrawInfo
  1298.     move.l    a2,a1
  1299.     moveq    #0,d0
  1300.     move.w    d2,d0
  1301.     move.l    gfxbase,a6
  1302.     jsr    -342(a6)        ; _LVOSetAPen
  1303.     move.l    a2,a1
  1304.     movem.l    (sp),d0-d3
  1305.     add.l    d0,d2
  1306.     add.l    d1,d3
  1307.     subq.l    #1,d2
  1308.     subq.l    #1,d3
  1309.     jsr    -306(a6)        ; _LVORectFill
  1310.     movem.l    (sp)+,d0-d3/a0/a1/a6
  1311.     jmp    -120(a6)        ; _LVODrawBevelBox
  1312.  
  1313. ; -----  draw the BackFill-Pattern into the window and init str_extend
  1314.     
  1315. .draw_ptrn    movem.l    d1-d7/a0-a6,-(sp)
  1316.     move.l    a0,d7
  1317.     move.l    $2e(a0),a0        ; wd_WScreen
  1318.     move.l    intbase,a6
  1319.     jsr    -690(a6)        ; _LVOGetScreenDrawInfo
  1320.     cmp.l    #0,d0
  1321.     beq    .failed
  1322.     move.l    d0,d6        ; d6: DrawInfo
  1323.     move.l    d0,a0
  1324.     move.l    $04(a0),a0        ; dri_Pens
  1325.     move.w    $06(a0),d5        ; d5: SHINEPEN
  1326.     move.w    $0e(a0),d4        ; d4: BACKGROUNDPEN
  1327.  
  1328. ; -----  patch the String-Extend-Structure of the String-Gadget to
  1329. ; -----  change the color through activation
  1330.     
  1331.     move.l    gad_list,a1
  1332.     move.l    (a1),a1
  1333.     move.l    (a1),a1
  1334.     move.l    (a1),a1        ; a1: ^StringGadget
  1335.     move.l    $22(a1),a1        ; a1: SpecialInfo
  1336.     move.l    $18(a1),a1        ; a1: StringExtend
  1337.  
  1338.     move.b    $05(a0),$04(a1)    ; TEXTPEN
  1339.     move.b    $0f(a0),$05(a1)    ; SHINEPEN
  1340.     move.b    $05(a0),$06(a1)    ; TEXTPEN
  1341.     move.b    $07(a0),$07(a1)    ; HIFILLPEN
  1342.  
  1343. ; -----  ok, pen-copy done
  1344.     
  1345.     move.l    d7,a0
  1346.     move.l    $2e(a0),a0        ; wd_WScreen
  1347.     move.l    d6,a1
  1348.     jsr    -696(a6)        ; _LVOFreeScreenDrawInfo
  1349.     move.l    d7,a0
  1350.     move.l    50(a0),a0        ; wd_RastPort
  1351.     move.l    a0,d6        ; d6: RastPort
  1352.     move.l    #pattern,$08(a0)    ; rp_AreaPtrn
  1353.     move.b    #1,$1d(a0)        ; rp_AreaPtSize
  1354.     move.l    d6,a1
  1355.     move.l    d5,d0        ; SHINEPEN
  1356.     move.l    gfxbase,a6
  1357.     jsr    -342(a6)        ; _LVOSetAPen
  1358.     move.l    d6,a1
  1359.     move.l    d4,d0        ; BACKGROUNDPEN
  1360.     jsr    -348(a6)        ; _LVOSetBPen
  1361.     move.l    d6,a1
  1362.     moveq    #1,d0        ; JAM2
  1363.     jsr    -354(a6)        ; _LVOSetDrMd
  1364.     move.l    d7,a0
  1365.     moveq    #0,d0
  1366.     moveq    #0,d1
  1367.     moveq    #0,d2
  1368.     moveq    #0,d3
  1369.     moveq    #0,d4
  1370.     moveq    #0,d5
  1371.     move.b    $36(a0),d0        ; wd_BorderLeft
  1372.     move.b    $37(a0),d1        ; wd_BorderTop
  1373.     move.b    $38(a0),d4        ; wd_BorderRight
  1374.     move.b    $39(a0),d5        ; wd_BorderBottom
  1375.     move.w    $08(a0),d2        ; wd_Width
  1376.     sub.w    d4,d2
  1377.     move.w    $0a(a0),d3        ; wd_Height
  1378.     sub.w    d5,d3
  1379.     move.l    d6,a1
  1380.     jsr    -306(a6)        ; _LVORectFill
  1381.     move.l    d6,a0
  1382.     move.l    #0,$08(a0)
  1383.     move.b    #0,$1d(a0)
  1384.     moveq    #0,d0        ; all ok
  1385.     movem.l    (sp)+,d1-d7/a0-a6
  1386.     rts
  1387. .failed    moveq    #-1,d0        ; no DrawInfo
  1388.     movem.l    (sp)+,d1-d7/a0-a6
  1389.     rts
  1390.  
  1391. ; -----  open the xInstall-Window (font-sensitive !)
  1392. ; -----  1. calculate window`s dimensions and check if it 
  1393. ; -----     fits to the screen
  1394. ; -----  2. create the gadget-list (font-sensitive)
  1395. ; -----  3. open the window
  1396. ; -----  4. render the pattern and the bevel-box
  1397. ; -----  5. add the gadget-list to the window
  1398.  
  1399. setup_wnd    movem.l    d1-d4/a0-a4/a6,-(sp)
  1400.     move.l    screen,a0
  1401.     moveq    #0,d3
  1402.     moveq    #0,d2
  1403.     move.w    wnd_width,d2
  1404.     move.w    wnd_height,d3
  1405.     bsr    compute_font
  1406.     move.l    screen,a0
  1407.     move.l    d2,d0
  1408.     bsr    compute_x
  1409.     move.l    d0,d4
  1410.     move.w    wnd_left,d2
  1411.     add.w    d2,d0
  1412.     add.w    off_x,d0
  1413.     move.b    37(a0),d1        ; sc_WBorRight
  1414.     ext.w    d1
  1415.     add.w    d1,d0
  1416.     cmp.w    12(a0),d0        ; sc_Width
  1417.     bls.s    .width_ok
  1418.     move.w    12(a0),d0        ; sc_Width
  1419.     sub.w    d4,d0
  1420.     move.w    d0,d2
  1421. .width_ok    move.l    d3,d0
  1422.     bsr    compute_y
  1423.     move.l    d0,d4
  1424.     move.w    wnd_top,d3
  1425.     add.w    d3,d0
  1426.     add.w    off_y,d0
  1427.     move.b    38(a0),d1        ; sc_WBorBottom
  1428.     ext.w    d1
  1429.     add.w    d1,d0
  1430.     cmp.w    14(a0),d0        ; sc_Height
  1431.     bls.s    .height_ok
  1432.     move.w    14(a0),d0        ; sc_Height
  1433.     sub.w    d4,d0
  1434.     move.w    d0,d3
  1435. .height_ok    move.l    gadbase,a6
  1436.     lea.l    gad_list,a0
  1437.     jsr    -114(a6)        ; _LVOCreateContext
  1438.     move.l    d0,a3
  1439.     cmp.l    #0,d0
  1440.     beq    .c_error
  1441.     movem.w    d2-d3,-(sp)
  1442.     moveq    #0,d3
  1443.     lea.l    gad_tags,a4
  1444. .make_gads    move.l    4.w,a6
  1445.     lea.l    new_gads,a0
  1446.     move.l    d3,d0
  1447.     mulu    #30,d0
  1448.     add.l    d0,a0
  1449.     lea.l    ng_buffer,a1
  1450.     moveq    #30,d0
  1451.     jsr    -624(a6)        ; _LVOCopyMem
  1452.     lea.l    ng_buffer,a0
  1453.     move.l    visualinfo,22(a0)    ; ng_VisualInfo
  1454.     move.l    font,12(a0)    ; ng_GadgetFont
  1455.     move.w    (a0),d0        ; ng_Left
  1456.     bsr    compute_x
  1457.     add.w    off_x,d0
  1458.     move.w    d0,(a0)
  1459.     move.w    2(a0),d0        ; ng_Top
  1460.     bsr    compute_y
  1461.     add.w    off_y,d0
  1462.     move.w    d0,2(a0)
  1463.     move.w    4(a0),d0        ; ng_Width
  1464.     bsr    compute_x
  1465.     move.w    d0,4(a0)
  1466.     move.w    6(a0),d0        ; ng_Height
  1467.     bsr    compute_y
  1468.     move.w    d0,6(a0)
  1469.     move.l    gadbase,a6
  1470.     lea.l    gad_types,a0
  1471.     moveq    #0,d0
  1472.     move.l    d3,d1
  1473.     asl.l    #1,d1
  1474.     add.l    d1,a0
  1475.     move.w    (a0),d0
  1476.     move.l    a3,a0
  1477.     lea.l    ng_buffer,a1
  1478.     move.l    a4,a2
  1479.     jsr    -30(a6)        ; _LVOCreateGadgetA
  1480.     cmp.l    #0,d0
  1481.     bne.s    .create_ok
  1482.     movem.w    (sp)+,d2-d3
  1483.     bra    .g_error
  1484. .create_ok    
  1485.  
  1486. ; -----  make Show a ToggleSelect-Button
  1487.  
  1488.     movem.l    a0,-(sp)
  1489.     move.l    d0,a0
  1490.     cmp.w    #8,$26(a0)        ; gg_GadgetID
  1491.     bne.s    .goon1
  1492.     eor.w    #$100,$0e(a0)    ; gg_Activation
  1493.     move.l    a0,show_gg
  1494. .goon1    movem.l    (sp)+,a0
  1495.  
  1496. ; -----  done
  1497.  
  1498.     move.l    d0,a3
  1499.     move.l    d3,d0
  1500.     asl.l    #2,d0
  1501.     lea.l    gadgets,a0
  1502.     add.l    d0,a0
  1503.     move.l    a3,(a0)
  1504. .tag_loop    tst.l    (a4)
  1505.     beq.s    .do_next
  1506.     addq.w    #8,a4
  1507.     bra.s    .tag_loop
  1508. .do_next    addq.w    #4,a4
  1509.     addq.w    #1,d3
  1510.     cmp.w    #gad_count,d3
  1511.     bmi    .make_gads
  1512.     movem.w    (sp)+,d2-d3
  1513.     move.l    screen,tag_screen+4
  1514.     ext.l    d2
  1515.     ext.l    d3
  1516.     move.l    d2,tag_left+4
  1517.     move.l    d3,tag_top+4
  1518.     move.l    screen,a0
  1519.     move.w    wnd_width,d0
  1520.     bsr    compute_x
  1521.     add.w    off_x,d0
  1522.     move.b    37(a0),d1        ; sc_WBorRight
  1523.     ext.w    d1
  1524.     add.w    d1,d0
  1525.     move.l    d0,tag_width+4
  1526.     move.w    wnd_height,d0
  1527.     bsr    compute_y
  1528.     add.w    off_y,d0
  1529.     move.b    38(a0),d1        ; sc_WBorBottom
  1530.     ext.w    d1
  1531.     add.w    d1,d0
  1532.     move.l    d0,tag_height+4
  1533.     move.l    intbase,a6
  1534.     move.l    #0,a0
  1535.     lea.l     window_tags,a1
  1536.     jsr    -606(a6)        ; _LVOOpenWindowTagList
  1537.     move.l    d0,window
  1538.     beq.s    .w_error
  1539.     bsr    wnd_render    
  1540.     move.l    window,a0
  1541.     move.l    gad_list,a1
  1542.     moveq    #-1,d0
  1543.     moveq    #-1,d1
  1544.     move.l    #0,a2
  1545.     move.l    intbase,a6
  1546.     jsr    -438(a6)        ; _LVOAddGList
  1547.     move.l    gad_list,a0
  1548.     move.l    window,a1
  1549.     moveq    #-1,d0
  1550.     jsr    -432(a6)        ; _LVORefreshGList
  1551.     move.l    window,a0
  1552.     move.l    #0,a1
  1553.     move.l    gadbase,a6
  1554.     jsr    -84(a6)        ; _LVOGT_RefreshWindow
  1555.     moveq    #0,d0
  1556. .done    movem.l    (sp)+,d1-d4/a0-a4/a6
  1557.     rts
  1558. .c_error    moveq    #1,d0
  1559.     bra.s    .done
  1560. .g_error    moveq    #2,d0
  1561.     bra.s    .done
  1562. .w_error    moveq    #4,d0
  1563.     bra.s    .done
  1564.  
  1565. ; -----  close the window
  1566.  
  1567. close_wnd    movem.l    d0-d1/a0-a2/a6,-(sp)
  1568.     move.l    intbase,a6
  1569.     move.l    window,a0
  1570.     cmpa.l    #0,a0
  1571.     beq.s    .no_wnd
  1572.     jsr    -72(a6)        ; _LVOCloseWindow
  1573.     move.l    #0,window
  1574. .no_wnd    move.l    gadbase,a6
  1575.     move.l    gad_list,a0
  1576.     cmp.l    #0,a0
  1577.     beq.s    .no_gads
  1578.     jsr    -36(a6)        ; _LVOFreeGadgets
  1579.     move.l    #0,gad_list
  1580. .no_gads    movem.l    (sp)+,d0-d1/a0-a2/a6
  1581.     rts
  1582.  
  1583. ; -----  this gets the loc-string or the default (english)
  1584.  
  1585. get_string    movem.l    d0/d1/a0/a1/a6,-(sp)
  1586.     move.l    catalog,d0
  1587.     beq.s    .done
  1588.     move.l    24(sp),a1        ; a1 -> string
  1589.     moveq    #0,d0
  1590.     move.l    a1,d1
  1591.     lea.l    locale_start,a0
  1592.     sub.l    a0,d1
  1593.     beq.s    .get_it
  1594. .loop    tst.b    (a0)+
  1595.     bne.s    .ok
  1596.     addq.l    #1,d0
  1597. .ok    subq.l    #1,d1
  1598.     bne.s    .loop
  1599. .get_it    move.l    locbase,a6
  1600.     move.l    catalog,a0
  1601.     jsr    -72(a6)        ; _LVOGetCatalogStr
  1602.     move.l    d0,24(sp)
  1603. .done    movem.l    (sp)+,d0/d1/a0/a1/a6
  1604.     rts
  1605.  
  1606.  SECTION "xInstall_DATA",DATA
  1607.  
  1608. ******************************************************
  1609. *                   XInstall v1.4                    *
  1610. *          now all datas, structures etc             *
  1611. ******************************************************
  1612.  
  1613.     dc.b    "$VER: xInstall 1.4 (30.09.94)"
  1614.     even
  1615.  
  1616. req_name    dc.b    "reqtools.library",0
  1617.     even
  1618. dos_name    dc.b    "dos.library",0
  1619.     even
  1620. loc_name    dc.b    "locale.library",0
  1621.     even
  1622. cat_name    dc.b    "xinstall.catalog",0
  1623.     even
  1624. track_name    dc.b    "trackdisk.device",0
  1625.     even
  1626. port_name    dc.b    "xInstall_PORT",0
  1627.  
  1628.     cnop    0,4
  1629.  
  1630. pattern    dc.w    $aaaa,$5555
  1631.  
  1632. thistask    dc.l    0
  1633. reqbase    dc.l    0
  1634. intbase    dc.l    0
  1635. gfxbase    dc.l    0
  1636. dosbase    dc.l    0
  1637. gadbase    dc.l    0
  1638. locbase    dc.l    0
  1639. bb_mem    dc.l    0
  1640. wbenchmsg    dc.l    0
  1641. catalog    dc.l    0
  1642. show_gg    dc.l    0
  1643. dev_cmd    dc.w    3
  1644.  
  1645. dis_tab    dc.l    6,7
  1646.  
  1647. getfile_1    dc.l    0
  1648.  
  1649. disk_io    ds.b    20    ; Message-Structure
  1650.     ds.l    1    ; Ptr Device-Structure
  1651.     ds.l    1    ; Ptr Unit-Structure
  1652.     ds.w    1    ; Device-Kommand
  1653.     ds.b    1    ; Flags
  1654.     ds.b    1    ; Error
  1655. ioext_requ    ds.l    1    ; Bytes
  1656.     ds.l    1
  1657.     ds.l    1    ; Ptr DataBuffer
  1658.     ds.l    1    ; Offset (Startblock)
  1659.     cnop    0,4    
  1660.  
  1661. replyport    ds.b    14    ; Node-Structure
  1662.     ds.b    1    ; Flags
  1663.     ds.b    1    ; Signal-Bits
  1664.     ds.l    1    ; Ptr to Task
  1665.     ds.b    60    ; Message-List
  1666.     cnop    0,4
  1667.  
  1668. ; -----  Defs 4 About-Requester (text: look at LOCALE at the bottom...)
  1669.  
  1670. about_tags    dc.l    rt_window,0
  1671.     dc.l    rt_lockwindow,1
  1672.     dc.l    rt_reqpos,0
  1673.     dc.l    rt_screentofront,1
  1674.     dc.l    rt_underscore,"_"
  1675.     dc.l    rtez_reqtitle,reqtitle
  1676.     dc.l    rtez_flags
  1677. ez_flags    dc.l    4
  1678.     dc.l    0
  1679.  
  1680. about_gad    dc.b    "_OK",0
  1681.     even
  1682.  
  1683. reqtitle    dc.b    "xInstall v1.4",0
  1684.     even
  1685.  
  1686. ; -----  Examine-Buffer
  1687.  
  1688.     cnop    0,4
  1689. examine_bf    ds.b    260
  1690.     even
  1691.  
  1692. ; -----  Defs 4 FileRequester
  1693.  
  1694. freq_tags    dc.l    rt_window,0
  1695.     dc.l    rt_lockwindow,1
  1696.     dc.l    rt_reqpos,0
  1697.     dc.l    rt_screentofront,1
  1698.     dc.l    rt_underscore,"_"
  1699.     dc.l    rtfi_flags,$10
  1700.     dc.l    0
  1701.  
  1702. freq_array    ds.b    108
  1703.     even
  1704.  
  1705. bb_path    ds.b    256
  1706.     even
  1707.  
  1708. ; -----  Defs 4 Enter-Scroll-Text-Requester
  1709.  
  1710. scrl_tags    dc.l    rt_window,0
  1711.     dc.l    rt_lockwindow,1
  1712.     dc.l    rt_reqpos,0
  1713.     dc.l    rt_screentofront,1
  1714.     dc.l    rt_underscore,"_"
  1715.     dc.l    rtez_flags,4
  1716.     dc.l    rtgs_allowempty,0
  1717.     dc.l    rtgs_textfmt,0
  1718.     dc.l    0
  1719.  
  1720. ; -----  other definitions
  1721.  
  1722. bb_table    dc.l    cleared,cleared_end
  1723.     dc.l    standart,standart_end
  1724.     dc.l    message,message_end
  1725.     dc.l    scroller,scroller_end
  1726.     dc.l    memtest,memtest_end
  1727.  
  1728. gtcy_act    dc.l    gtcy_active,1
  1729.     dc.l    0
  1730.     
  1731. bb_id    dc.b    0
  1732.     even
  1733.  
  1734. fs_id    dc.b    0
  1735.     even
  1736.  
  1737. stringtags    dc.l    gtst_string,0
  1738.     dc.l    0
  1739.     
  1740. jmp_tab1    dc.l    bootblock1        ; Cycle "Bootblock"
  1741.     dc.l    filesys1        ; Cycle "FileSys"
  1742.     dc.l    df0,df1,df2,df3    ; Buttons df0-df3
  1743.     dc.l    read        ; Button "Read"
  1744.     dc.l    load        ; Button "Load"
  1745.     dc.l    get_msg        ; Button "Show"
  1746.     dc.l    about        ; Button "Show"
  1747.  
  1748. jmp_tab2    dc.b    "Q",0        ; this tab I need to get
  1749.     dc.l    quit        ; the adress of the routine
  1750.     dc.b    "B",0        ; to jump to if the under-
  1751.     dc.l    bootblock2        ; scored character was
  1752.     dc.b    "F",0        ; pressed
  1753.     dc.l    filesys2
  1754.     dc.b    "q",0
  1755.     dc.l    quit
  1756.     dc.b    "b",0
  1757.     dc.l    bootblock2
  1758.     dc.b    "f",0
  1759.     dc.l    filesys2
  1760.     dc.b    "0",0
  1761.     dc.l    df0
  1762.     dc.b    "1",0
  1763.     dc.l    df1
  1764.     dc.b    "2",0
  1765.     dc.l    df2
  1766.     dc.b    "3",0
  1767.     dc.l    df3
  1768. about_key1    dc.w    0
  1769.     dc.l    about
  1770. show_key1    dc.w    0
  1771.     dc.l    show
  1772. read_key1    dc.w    0
  1773.     dc.l    read
  1774. load_key1    dc.w    0
  1775.     dc.l    load
  1776. about_key2    dc.w    0
  1777.     dc.l    about
  1778. show_key2    dc.w    0
  1779.     dc.l    show
  1780. read_key2    dc.w    0
  1781.     dc.l    read
  1782. load_key2    dc.w    0
  1783.     dc.l    load
  1784.     dc.b    0        ; this is the end of tab
  1785.     even
  1786.  
  1787. ; -----  Errors trackdisk.device (will be initialized later)
  1788.  
  1789. td_errtab    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1790.  
  1791.     opt    o+,p+
  1792.     
  1793. ; -----  BootBlock: DOS CLEARED (what a nice BB)
  1794.  
  1795. cleared    dc.l    $444f5300        ; DOS,0
  1796.     dc.l    $00000000        ; later CheckSum
  1797.     dc.l    $00000370        ; ptr to disk`s RootBlock
  1798.  
  1799. cleared_end
  1800.  
  1801. ; -----  BootBlock: STANDART (BORING, isn`t it ??)
  1802.  
  1803. standart    dc.l    $444f5300        ; Standart-Bootcode
  1804.     dc.l    $00000000
  1805.     dc.l    $00000370
  1806.  
  1807.     lea.l    exp_libra(pc),a1
  1808.     moveq    #37,d0
  1809.     jsr    -552(a6)        ; _LVOOpenLibrary
  1810.     cmp.l    #0,d0
  1811.     beq.s    .no_explib
  1812.     move.l    d0,a1
  1813.     bset    #6,34(a1)
  1814.     jsr    -414(a6)        ; _LVOCloseLibrary
  1815. .no_explib    lea.l    dos_libra(pc),a1
  1816.     jsr    -96(a6)        ; _LVOFindResident
  1817.     cmp.l    #0,d0
  1818.     beq.s    .not_found
  1819.     move.l    d0,a0
  1820.     move.l    22(a0),a0
  1821.     moveq    #0,d0
  1822.     rts
  1823. .not_found    moveq    #-1,d0
  1824.     rts
  1825.     
  1826. exp_libra    dc.b    "expansion.library",0
  1827. dos_libra    dc.b    "dos.library",0
  1828.  
  1829. standart_end
  1830.  
  1831. ; -----  BootBlock: MESSAGE (this is not so boring, or ??)
  1832.  
  1833. message    dc.l    $444f5300
  1834.     dc.l    $00000000
  1835.     dc.l    $00000370
  1836.  
  1837.     move.l    4.w,a6
  1838.     jsr    -132(a6)        ; _LVOForbid
  1839.  
  1840. .alloc_mem    move.l    #320+12+100+108,d0    ; BitPlane+BitMap+RastPort+CopperList
  1841.     move.l    #$10002,d1        ; MEMF_CHIP|MEMF_CLEAR
  1842.     jsr    -198(a6)        ; _LVOAllocMem
  1843.     cmp.l    #0,d0
  1844.     beq    .dos_boot
  1845.     move.l    d0,d7
  1846.  
  1847. .open_gfx    lea.l    gfx_libr(pc),a1
  1848.     moveq    #33,d0
  1849.     jsr    -552(a6)        ; _LVOOpenLibrary
  1850.     cmp.l    #0,d0
  1851.     beq    .free_mem
  1852.     move.l    d0,a6
  1853.  
  1854.     move.l    d7,a1        ; init what U need, my son
  1855.     lea.l    320+12(a1),a1
  1856.     jsr    -198(a6)        ; _LVOInitRastPort
  1857.  
  1858.     move.l    d7,a0
  1859.     lea.l    320(a0),a0
  1860.     moveq    #1,d0
  1861.     move.l    #320,d1
  1862.     moveq    #8,d2
  1863.     jsr    -390(a6)        ; _LVOInitBitMap
  1864.  
  1865.     move.l    d7,a0
  1866.     lea.l    320+12(a0),a0
  1867.     move.l    d7,a1
  1868.     lea.l    320(a1),a1
  1869.     move.l    d7,a2
  1870.     move.l    a1,$04(a0)
  1871.     move.l    a2,$08(a1)
  1872.  
  1873.     move.l    d7,a1
  1874.     lea.l    320+12(a1),a1
  1875.     moveq    #52,d0
  1876.     moveq    #6,d1
  1877.     jsr    -240(a6)        ; _LVOMove
  1878.     move.l    d7,a1
  1879.     lea.l    320+12(a1),a1
  1880.     lea.l    boot_text(pc),a0
  1881.     moveq    #24,d0
  1882.     jsr    -60(a6)        ; _LVOText
  1883.  
  1884.     moveq    #107,d0
  1885.     move.l    d7,a0
  1886.     lea.l    320+12+100(a0),a0
  1887.     move.l    a0,a2
  1888.     lea.l    coplist(pc),a1
  1889. .loop    move.b    (a1)+,(a0)+
  1890.     dbf    d0,.loop
  1891.  
  1892.     move.l    d7,d0
  1893.     move.w    d0,46(a2)
  1894.     swap    d0        ; BPL1PTH / BPL1PTL
  1895.     move.w    d0,42(a2)
  1896.  
  1897.     lea.l    $dff000,a0
  1898.     move.l    a2,$080(a0)    ; COP1LCH
  1899.     move.w    #0,$088(a0)    ; COPJMP1
  1900.     move.w    #$8300,$096(a0)    ; DMACON
  1901.  
  1902.     move.w    #$000c,d1        ; wait a little bit
  1903.     move.w    #$ffff,d0        ; (sorry for polling !)
  1904. .wait    nop
  1905.     nop
  1906.     dbf.w    d0,.wait
  1907.     dbf.w    d1,.wait
  1908.  
  1909.     move.l    $26(a6),$080(a0)    ; COP1LCH
  1910.     move.w    #0,$088(a0)
  1911.  
  1912. .close_gfx    move.l    a6,a1
  1913.     move.l    4.w,a6
  1914.     jsr    -414(a6)        ; _LVOCloseLibrary
  1915.  
  1916. .free_mem    move.l    d7,a1
  1917.     move.l    #320+12+100+108,d0
  1918.     jsr    -210(a6)        ; _LVOFreeMem
  1919.  
  1920.     jsr    -138(a6)        ; _LVOPermit
  1921.  
  1922. .dos_boot    lea.l    exp_libr(pc),a1    ; now the standard-code
  1923.     moveq    #37,d0        ; (don`t forget it - never !)
  1924.     jsr    -552(a6)        ; _LVOOpenLibrary
  1925.     cmp.l    #0,d0
  1926.     beq.s    no_explib
  1927.     move.l    d0,a1
  1928.     bset    #6,34(a1)
  1929.     jsr    -414(a6)        ; _LVOCloseLibrary
  1930. no_explib    lea.l    dos_libr(pc),a1
  1931.     jsr    -96(a6)        ; _LVOFindResident
  1932.     cmp.l    #0,d0
  1933.     beq.s    not_found
  1934.     move.l    d0,a0
  1935.     move.l    22(a0),a0
  1936.     moveq    #0,d0
  1937.     rts
  1938. not_found    moveq    #-1,d0
  1939.     rts
  1940.  
  1941. gfx_libr    dc.b    "graphics.library",0
  1942.     even
  1943. dos_libr    dc.b    "dos.library",0
  1944.     even
  1945. exp_libr    dc.b    "expansion.library",0
  1946.     even
  1947. boot_text    dc.b    "No Virus on Bootblock !!",0
  1948.     even
  1949.  
  1950. ; -----  this is the Copperlist you need !!
  1951.  
  1952. coplist    dc.w    $2001,$fffe
  1953.     dc.w    $0100        ; BPLCON0
  1954.     dc.w    $0200
  1955.     dc.w    $008e        ; DIWSTRT
  1956.     dc.w    $0581
  1957.     dc.w    $0090        ; DIWSTOP
  1958.     dc.w    $40c1
  1959.     dc.w    $0092        ; DDFSTRT
  1960.     dc.w    $0038
  1961.     dc.w    $0094        ; DDFSTOP
  1962.     dc.w    $00d0
  1963.     dc.w    $0102        ; BPLCON1
  1964.     dc.w    $0000
  1965.     dc.w    $0104        ; BPLCON2
  1966.     dc.w    $0024
  1967.     dc.w    $0108        ; BPL1MOD
  1968.     dc.w    $0000
  1969.     dc.w    $010a        ; BPL2MOD
  1970.     dc.w    $0000
  1971.     dc.w    $00e0        ; BPL1PTH
  1972.     dc.w    0
  1973.     dc.w    $00e2        ; BPL1PTL
  1974.     dc.w    0
  1975.     dc.w    $182        ; COLOR01
  1976.     dc.w    $00f0
  1977.     dc.w    $180        ; COLOR00
  1978.     dc.w    $0040
  1979.     dc.w    $9b0f        ; line
  1980.     dc.w    $fffe
  1981.     dc.w    $180        ; COLOR00
  1982.     dc.w    $00f0
  1983.     dc.w    $9d0f        ; line
  1984.     dc.w    $fffe
  1985.     dc.w    $180        ; COLOR00
  1986.     dc.w    $0000
  1987.     dc.w    $a20f,$fffe
  1988.     dc.w    $0100        ; BPLCON0
  1989.     dc.w    $1200
  1990.     dc.w    $a90f,$fffe
  1991.     dc.w    $0100        ; BPLCON0
  1992.     dc.w    $0200
  1993.     dc.w    $af0f        ; line
  1994.     dc.w    $fffe
  1995.     dc.w    $180        ; COLOR00
  1996.     dc.w    $00f0
  1997.     dc.w    $b10f        ; line
  1998.     dc.w    $fffe
  1999.     dc.w    $180        ; COLOR00
  2000.     dc.w    $0040
  2001.     dc.l    $fffffffe        ; End of CopperList
  2002.     
  2003. coplist_end
  2004.  
  2005. message_end
  2006.  
  2007. ; -----  BootBlock: MEMTEST (exactly 1024 Bytes !!!)
  2008.  
  2009. ; -----  there is a little bug (do you find it, guy ??), but if you
  2010. ; -----  have a "normal" AMIGA the bug will never appear !
  2011.  
  2012. memtest    dc.l    $444f5300        ; DOS-Disk OFS
  2013.     dc.l    $00000000        ; CheckSum
  2014.     dc.l    $00000370        ; RootBlock pointer
  2015.  
  2016. ; -----  Standart-DOS-Bootcode
  2017.     
  2018. .dos_boot    lea.l    exp_lib(pc),a1    ; Standard OS2.0 code
  2019.     moveq    #37,d0
  2020.     jsr    -552(a6)        ; _LVOOpenLibrary
  2021.     cmp.l    #0,d0
  2022.     beq.s    .no_explib
  2023.     move.l    d0,a1
  2024.     bset    #6,34(a1)
  2025.     jsr    -414(a6)        ; _LVOCloseLibrary
  2026. .no_explib    lea.l    dos_lib(pc),a1
  2027.     jsr    -96(a6)        ; _LVOFindResident
  2028.     cmp.l    #0,d0
  2029.     beq.s    .not_found
  2030.     move.l    d0,a0
  2031.     move.l    22(a0),a0
  2032.     moveq    #0,d0
  2033.     bra.s    .own_boot
  2034. .not_found    moveq    #-1,d0    
  2035.  
  2036. ; -----  MemTest-Routine
  2037.     
  2038. .own_boot    movem.l    d0-d7/a0-a6,-(sp)
  2039.     cmp.b    #50,530(a6)    ; NTSC-Display ?? (PAL -> 50Hz)
  2040.     bne    .softreset
  2041.     cmp.l    #0,42(a6)        ; ColdCapture
  2042.     bne    .vecs_bad
  2043.     cmp.l    #0,46(a6)        ; CoolCapture
  2044.     bne    .vecs_bad
  2045.     cmp.l    #0,546(a6)        ; KickMemPtr
  2046.     bne    .vecs_bad
  2047.     cmp.l    #0,550(a6)        ; KickTagPtr
  2048.     bne    .vecs_bad
  2049.     cmp.l    #0,554(a6)        ; KickCheckSumPtr
  2050.     bne    .vecs_bad
  2051.  
  2052. ; -----  setup green CopperList, wait and terminate
  2053.  
  2054. .vecs_ok    move.l    #cop_end-cop_start,d0
  2055.     moveq    #2,d1
  2056.     jsr    -198(a6)        ; _LVOAllocMem
  2057.     lea.l    cop_adress(pc),a0
  2058.     move.l    d0,(a0)
  2059.     beq.s    .back_1
  2060.     lea.l    cop_start(pc),a0
  2061.     move.l    cop_adress(pc),a1
  2062.     move.l    #cop_end-cop_start-1,d0
  2063. .cl_copy    move.b    (a0)+,(a1)+
  2064.     dbf    d0,.cl_copy
  2065.     jsr    -132(a6)        ; _LVOForbid
  2066.     lea.l    $dff000,a5
  2067.     move.w    #$03a0,$96(a5)    ; DMACON
  2068.     move.l    cop_adress(pc),$80(a5) ; COP1LCH
  2069.     move.w    #0,$88(a5)        ; COPJMP1
  2070.     move.w    #$8280,$96(a5)    ; DMACON
  2071.     moveq    #$c,d1
  2072.     move.l    #$ffff,d0
  2073. .wait_loop    nop            ; wait (Polling)
  2074.     dbra    d0,.wait_loop
  2075.     dbra    d1,.wait_loop
  2076.     lea.l    gfx_lib(pc),a1
  2077.     moveq    #33,d0
  2078.     jsr    -552(a6)        ; _LVOOpenLibrary
  2079.     move.l    d0,a4
  2080.     move.l    38(a4),$80(a5)    ; COP1LCH
  2081.     move.w    #0,$88(a5)        ; COPJMP1
  2082.     move.w    #$83e0,$96(a5)    ; DMACON
  2083.     jsr    -138(a6)        ; _LVOPermit
  2084.     move.l    cop_adress(pc),a1
  2085.     move.l    #cop_end-cop_start,d0
  2086.     jsr    -210(a6)        ; _LVOFreeMem
  2087. .back_1    movem.l    (sp)+,d0-d7/a0-a6
  2088.     rts
  2089.  
  2090. ; -----  setup Error-Alert
  2091.  
  2092. .vecs_bad    lea.l    bad_text(pc),a1
  2093.     lea.l    71(a1),a1
  2094.     move.l    42(a6),d0        ; ColdCapture
  2095.     bsr    .bbbin2hex
  2096.     lea.l    36(a1),a1
  2097.     move.l    46(a6),d0        ; CoolCapture
  2098.     bsr    .bbbin2hex
  2099.     lea.l    27(a1),a1
  2100.     move.l    546(a6),d0        ; KickMemPtr
  2101.     bsr    .bbbin2hex
  2102.     lea.l    36(a1),a1
  2103.     move.l    550(a6),d0        ; KickTagPtr
  2104.     bsr    .bbbin2hex
  2105.     lea.l    33(a1),a1
  2106.     move.l    554(a6),d0        ; KickCheckSumPtr
  2107.     bsr    .bbbin2hex
  2108.     lea.l    35(a1),a1
  2109.     move.l    300(a6),d0        ; ResModules
  2110.     bsr    .bbbin2hex
  2111.  
  2112.     lea.l    int_lib(pc),a1
  2113.     moveq    #33,d0
  2114.     jsr    -552(a6)        ; _LVOOpenLibrary
  2115.     move.l    d0,a6
  2116.     beq.s    .back_2
  2117.     lea.l    bad_text(pc),a0
  2118.     moveq    #1,d0
  2119.     moveq    #95,d1
  2120.     jsr    -90(a6)        ; _LVODisplayAlert
  2121.     cmp.l    #0,d0
  2122.     beq.s    .coldreset
  2123.     move.l    a6,a1
  2124.     move.l    4.w,a6
  2125.     jsr    -414(a6)        ; _LVOCloseLibrary
  2126. .back_2    movem.l    (sp)+,d0-d7/a0-a6
  2127.     rts
  2128.  
  2129. ; -----  make ColdReset (sorry, this is NOT the StyleGuide-Reset,
  2130. ; -----  but this works too)
  2131.  
  2132. .coldreset    move.l    4.w,a6
  2133.     jsr    -132(a6)        ; _LVOForbid
  2134.  
  2135.     move.l    #0,38(a6)        ; Exec_ChkBase
  2136.     move.l    #0,42(a6)        ; ColdCapture
  2137.     move.l    #0,46(a6)        ; CoolCapture
  2138.     move.l    #0,82(a6)        ; Exec_ChkSum
  2139.     move.l    #0,300(a6)        ; ResModules
  2140.     move.l    #0,546(a6)        ; KickMemPtr
  2141.     move.l    #0,550(a6)        ; KickTagPtr
  2142.     move.l    #0,554(a6)        ; KickCheckSumPtr
  2143.     
  2144. ; -----  make Soft-Reset
  2145.     
  2146. .softreset    jsr    -150(a6)        ; _LVOSuperState
  2147.     move.l    #$fc0002,$20.w
  2148.     movea.l    #$f80002,a0
  2149.     reset            ; reserved Cmd (SuperVisor)
  2150.     jmp    (a0)
  2151.  
  2152. ; -----  Bin -> ASCII-Hex
  2153.  
  2154. .bbbin2hex    lea.l    8(a1),a1
  2155.     lea.l    hextab(pc),a0
  2156.     moveq    #7,d1
  2157. .loop    move.l    d0,d2
  2158.     and.l    #15,d2
  2159.     move.b    (a0,d2),-(a1)
  2160.     lsr.l    #4,d0
  2161.     dbra    d1,.loop
  2162.     rts
  2163.  
  2164. ; -----  CopperList (oh what a sweet list !)
  2165.  
  2166. cop_start    dc.w    $180,$00d0
  2167.     dc.w    $7007,$fffe
  2168.     dc.w    $180,$0080
  2169.     dc.w    $d00d,$fffe
  2170.     dc.w    $180,$0040
  2171.     dc.w    $ffff,$fffe
  2172. cop_end
  2173.  
  2174. ; -----  Variablen/Konstanen
  2175.  
  2176. cop_adress    dc.l    0
  2177.  
  2178. hextab    dc.b    "0123456789ABCDEF"
  2179.  
  2180. exp_lib    dc.b    "expansion.library",0
  2181. dos_lib    dc.b    "dos.library",0
  2182. gfx_lib    dc.b    "graphics.library",0
  2183. int_lib    dc.b    "intuition.library",0
  2184.  
  2185. bad_text    dc.b    0,128,15
  2186.     dc.b    "Some of your Vectors are not pointing to zero !!"
  2187.     dc.b    0,$ff,0,80,40
  2188.     dc.b    "ColdCapture:                        CoolCapture:           "
  2189.     dc.b    0,$ff,0,80,50
  2190.     dc.b    "KickMemPtr:                         KickTagPtr:            "
  2191.     dc.b    0,$ff,0,80,60
  2192.     dc.b    "KickCheckSumPtr:                    ResModulesBase:           "
  2193.     dc.b    0,$ff,0,24,85
  2194.     dc.b    "* [LMB] to continue *                               * [RMB] to ColdReset *"
  2195.     dc.b    0,0
  2196.  
  2197.     dc.b    0,"** MemTest V1.2 - 1993 by Jens Troeger **"
  2198.  
  2199. memtest_end
  2200.  
  2201. ; -----  BootBlock: SCROLLER
  2202. ; -----  thanx to Holger Gzella for his help !
  2203.  
  2204. scroller    dc.l    $444f5300        ; Standart-Bootcode
  2205.     dc.l    $00000000
  2206.     dc.l    $00000370
  2207.  
  2208. .scroller    lea.l    fontname(pc),a0    ; alloc and init all you need
  2209.     lea.l    textattr(pc),a1
  2210.     move.l    a0,(a1)
  2211.  
  2212.     lea.l    gfxname(pc),a1
  2213.     moveq    #33,d0
  2214.     move.l    4.w,a6
  2215.     jsr    -552(a6)        ; _LVOOpenLibrary
  2216.     cmp.l    #0,d0
  2217.     beq    .error_1
  2218.     lea.l    gfx_base(pc),a0
  2219.     move.l    d0,(a0)
  2220.  
  2221.      move.l    d0,a6
  2222.     lea.l    textattr(pc),a0
  2223.     jsr    -72(a6)        ; _LVOOpenFont
  2224.     cmp.l    #0,d0
  2225.     beq    .error_2
  2226.     lea.l    fontbase(pc),a0
  2227.     move.l    d0,(a0)
  2228.  
  2229.     move.l    #2000,d0
  2230.     move.l    #$10002,d1
  2231.     move.l    4.w,a6
  2232.     jsr    -198(a6)        ; _LVOAllocMem
  2233.     cmp.l    #0,d0
  2234.     beq    .error_3
  2235.     lea.l    copperlist(pc),a0
  2236.     move.l    d0,(a0)
  2237.     
  2238.     move.l    #52*345,d0
  2239.     move.l    #$10002,d1
  2240.     move.l    4.w,a6
  2241.     jsr    -198(a6)        ; _LVOAllocMem
  2242.     cmp.l    #0,d0
  2243.     beq    .error_4
  2244.     lea.l    bitplane(pc),a0
  2245.     move.l    d0,(a0)
  2246.  
  2247.     jsr    -132(a6)        ; _LVOForbid
  2248.  
  2249.     move.w    #$3e0,$DFF096    ; DMACON
  2250.  
  2251.     move.l    copperlist(pc),a0    ; create the CopperList
  2252.     move.l    bitplane(pc),d2
  2253.     swap    d2
  2254.     move.w    #$0E0,(a0)+    ; BPL1PTH
  2255.     move.w    d2,(a0)+
  2256.     move.w    #$0E2,(a0)+    ; BPL1PTL
  2257.     swap    d2
  2258.     move.w    d2,(a0)+
  2259.     move.w    #$180,(a0)+    ; COLOR00
  2260.     move.w    #$000,(a0)+
  2261.     move.w    #$182,(a0)+    ; COLOR01
  2262.     move.w    #$000,(a0)+
  2263.  
  2264.     move.w    #$9001,d0        ; create CopperList
  2265.     move.w    #$0000,d1        ; the colors now...
  2266.     moveq    #$e,d2
  2267. .set_list1    move.w    d0,(a0)+
  2268.     move.w    #$fffe,(a0)+
  2269.     move.w    #$180,(a0)+
  2270.     move.w    d1,(a0)+
  2271.     add.w    #$100,d0
  2272.     add.w    #$101,d1
  2273.     dbra    d2,.set_list1
  2274.     moveq    #$f,d2
  2275.     add.w    #$a00,d0
  2276. .set_list2    move.w    d0,(a0)+
  2277.     move.w    #$fffe,(a0)+
  2278.     move.w    #$180,(a0)+
  2279.     move.w    d1,(a0)+
  2280.     add.w    #$100,d0
  2281.     sub.w    #$101,d1
  2282.     dbra    d2,.set_list2
  2283.  
  2284.     move.l    #$fffffffe,(a0)    ; end of list
  2285.  
  2286.     move.l    copperlist(pc),$DFF080 ; COP1LCH
  2287.     move.w    #0,$DFF088        ; COPJMP1
  2288.  
  2289.     move.w    #$1AC4,$DFF08E    ; DIWSTRT
  2290.     move.w    #$39D8,$DFF090    ; DIWSTOP
  2291.     move.w    #$0020,$DFF092    ; DDFSTRT
  2292.     move.w    #$00D8,$DFF094    ; DDFSTOP
  2293.     move.w    #$1000,$DFF100    ; BPLCON0
  2294.     move.w    #0,$DFF102        ; BPLCON1
  2295.     move.w    #0,$DFF104        ; BPLCON2
  2296.     move.w    #4,$DFF108        ; BPL1MOD
  2297.     move.w    #4,$DFF10A        ; BPL2MOD
  2298.  
  2299.     move.w    #$83C0,$DFF096    ; DMACON
  2300.  
  2301.     moveq.l    #0,d6
  2302.     lea.l    scrl_bufr(pc),a6
  2303.  
  2304. .scrollit    and.l   #$7,d6        ; now we scroll the text
  2305.     bne.s   .scrollon
  2306.  
  2307.     move.l    fontbase(pc),a0
  2308.     move.l    34(a0),a3
  2309.     move.w    38(a0),d4
  2310.     move.w    d4,d5
  2311.     mulu    #7,d4
  2312.     add.l    d4,a3
  2313.  
  2314.     moveq.l    #0,d1
  2315.  
  2316.     move.b    (a6)+,d1
  2317.     bne.s    .not_last
  2318.  
  2319.     lea.l    scrl_bufr(pc),a6
  2320.     move.b    (a6)+,d1
  2321.  
  2322. .not_last    cmp.b    #127,d1
  2323.     bls.s    .no_spec
  2324.  
  2325.     sub.b    #32,d1
  2326.  
  2327. .no_spec    sub.b    #32,d1
  2328.     add.l    d1,a3
  2329.  
  2330. .scrollon    move.l    bitplane(pc),a0
  2331.     add.l    #143*52,a0
  2332.     moveq    #7,d1
  2333.  
  2334.     move.l    a3,a5
  2335.  
  2336. .sync_beam    move.l    $DFF004,d3        ; VPOSR
  2337.     and.l    #$1ff00,d3
  2338.     cmp.l    #$08000,d3
  2339.     bne.s    .sync_beam
  2340.  
  2341.     addq.b    #$8,d6
  2342.  
  2343. .scroll_pl    moveq.l    #25,d3
  2344.     moveq    #0,d2
  2345.     move.b    (a5),d2
  2346.     sub.l    d5,a5
  2347.  
  2348.     roxl.w    #1,d2
  2349.     roxl.w    d6,d2
  2350.  
  2351. .scrl_wrd    roxl.w    -(a0)
  2352.     dbra    d3,.scrl_wrd
  2353.     dbra    d1,.scroll_pl
  2354.     addq    #1,d6
  2355.  
  2356.     btst.b    #6,$bfe001        ; PRA (CIA-A)
  2357.     bne.s    .scrollit
  2358.  
  2359.     move.l    #0,$DFF088        ; COPJMP1
  2360.     move.w    #$83E0,$DFF096    ; DMACON
  2361.  
  2362.     move.l    4.w,a6
  2363.     jsr    -138(a6)        ; _LVOPermit
  2364.  
  2365.     move.l    Bitplane(pc),a1
  2366.     move.l    #52*345,d0
  2367.            jsr    -210(a6)        ; _LVOFreeMem
  2368.  
  2369. .error_4    move.l    copperlist(pc),a1
  2370.     move.l    #2000,d0
  2371.     move.l    4.w,a6
  2372.     jsr    -210(a6)        ; _LVOFreeMem
  2373.     
  2374. .error_3    move.l    fontbase(pc),a1
  2375.     move.l    gfx_base(pc),a6
  2376.     jsr    -78(a6)        ; _LVOCloseFont
  2377.  
  2378. .error_2    move.l    gfx_base(pc),a1
  2379.     move.l    38(a1),$DFF080    ; COP1LCH
  2380.     move.l    4.w,a6
  2381.     jsr    -414(a6)        ; _LVOCloseLibrary
  2382.  
  2383. .error_1    lea.l    expname(pc),a1
  2384.     moveq    #37,d0
  2385.     jsr    -552(a6)        ; _LVOOpenLibrary
  2386.     cmp.l    #0,d0
  2387.     beq.s    .no_explib
  2388.     movea.l    d0,a1
  2389.     bset    #6,34(a1)
  2390.     jsr    -414(a6)        ; _LVOCloseLibrary
  2391. .no_explib    lea.l    dosname(pc),a1
  2392.     jsr    -96(a6)        ; _LVOFindResident
  2393.     cmp.l    #0,d0
  2394.     beq.s    .not_found
  2395.     movea.l    d0,a0
  2396.     movea.l    22(a0),a0
  2397.     moveq    #0,d0
  2398.     rts
  2399. .not_found    moveq    #-1,d0
  2400.     rts
  2401.  
  2402. gfx_base    dc.l    0
  2403. fontbase    dc.l    0
  2404.  
  2405. copperlist    dc.l    0
  2406. bitplane    dc.l    0
  2407.  
  2408. textattr    dc.l    0
  2409.     dc.w    8
  2410.     dc.b    0,1
  2411.  
  2412. gfxname    dc.b    "graphics.library",0
  2413.     even
  2414. dosname    dc.b    "dos.library",0
  2415.     even
  2416. expname    dc.b    "expansion.library",0
  2417.     even
  2418. fontname    dc.b    "topaz.font",0
  2419.     even
  2420.  
  2421. scrl_bufr    ds.b    50
  2422.     even
  2423.  
  2424. scroller_end
  2425.  
  2426.     opt    p-
  2427.  
  2428. ******************************************************
  2429. *    Below you find the modified GTB-datas used by   *
  2430. *          the modified GTB-source above.            *
  2431. *                                                    *
  2432. *  Excuse me, Jan, for this. But this works a little *
  2433. *   bit better and the executable is much smaller    *
  2434. ******************************************************
  2435.  
  2436. gad_count    equ    10        ; number of gadgets
  2437.  
  2438. screen    dc.l    0        ; certain pointers etc.
  2439. visualinfo    dc.l    0
  2440. pub_screen    dc.l    0
  2441. window    dc.l    0
  2442. gad_list    dc.l    0
  2443. vi_tags    dc.l    0
  2444. font    dc.l    0
  2445. font_x    dc.w    0
  2446. font_y    dc.w    0
  2447. off_x    dc.w    0
  2448. off_y    dc.w    0
  2449.  
  2450. gadgets    dcb.l    10,0        ; needed by gadget-creation
  2451.  
  2452. attr    dc.l    0        ; for topaz.font
  2453.     dc.w    0
  2454.     dc.b    0,0
  2455.  
  2456. ng_buffer    dc.w    0,0,0,0        ; later this newgadget-struc
  2457.     dc.l    0,0        ; will be filled
  2458.     dc.w    0
  2459.     dc.l    0,0,0
  2460.  
  2461. bevel_tags    dc.l    $80080034,$00000000    ; tags 4 bevelbox
  2462.     dc.l    $80080033,$00000000
  2463.     dc.l    $00000000
  2464.  
  2465. wnd_left    dc.w    0        ; window`s position
  2466. wnd_top    dc.w    11        ; (if font = topaz 8)
  2467. wnd_width    dc.w    433
  2468. wnd_height    dc.w    64
  2469.  
  2470. topaz_name    dc.b    "topaz.font",0
  2471.     even
  2472.  
  2473. gad_types    dc.w    7        ; the gadget-types
  2474.     dc.w    7        ; 2x CycleGad 
  2475.     dc.w    1        ; and Buttons
  2476.     dc.w    1
  2477.     dc.w    1
  2478.     dc.w    1
  2479.     dc.w    1
  2480.     dc.w    1
  2481.     dc.w    1
  2482.     dc.w    1
  2483.  
  2484. new_gads    dc.w    95,7,120,14    ; CYCLE: Bootblock
  2485.     dc.l    gadget0txt,0
  2486.     dc.w    0
  2487.     dc.l    $01,0,0
  2488.     
  2489.     dc.w    95,23,120,14    ; CYCLE: FileSys
  2490.     dc.l    gadget1txt,0
  2491.     dc.w    1
  2492.     dc.l    $01,0,0
  2493.  
  2494.     dc.w    7,48,91,14        ; BUTTON: df0
  2495.     dc.l    gadget2txt,0
  2496.     dc.w    2
  2497.     dc.l    $10,0,0
  2498.  
  2499.     dc.w    116,48,91,14    ; BUTTON: df1
  2500.     dc.l    gadget3txt,0
  2501.     dc.w    3
  2502.     dc.l    $10,0,0
  2503.  
  2504.     dc.w    225,48,91,14    ; BUTTON: df2
  2505.     dc.l    gadget4txt,0
  2506.     dc.w    4
  2507.     dc.l    $10,0,0
  2508.  
  2509.     dc.w    334,48,91,14    ; BUTTON: df3
  2510.     dc.l    gadget5txt,0
  2511.     dc.w    5
  2512.     dc.l    $10,0,0
  2513.  
  2514.     dc.w    233,23,89,14    ; BUTTON: Read
  2515. gad6_text    dc.l    0,0
  2516.     dc.w    6
  2517.     dc.l    $10,0,0
  2518.  
  2519.     dc.w    326,23,89,14    ; BUTTON: Load
  2520. gad7_text    dc.l    0,0
  2521.     dc.w    7
  2522.     dc.l    $10,0,0
  2523.  
  2524.     dc.w    326,7,89,14    ; BUTTON: Show
  2525. gad8_text    dc.l    0,0
  2526.     dc.w    8
  2527.     dc.l    $10,0,0
  2528.  
  2529.     dc.w    233,7,89,14    ; BUTTON: About
  2530. gad9_text    dc.l    0,0
  2531.     dc.w    9
  2532.     dc.l    $10,0,0
  2533.  
  2534. gad_tags    dc.l    $8008000E,gad0_lab    ; tags for every gadget
  2535.     dc.l    $80080040,"_"
  2536.     dc.l    $00000000
  2537.  
  2538.     dc.l    $8008000E,gad1_lab
  2539.     dc.l    $80080040,"_"
  2540.     dc.l    $00000000
  2541.  
  2542.     dc.l    $80080040,"_"
  2543.     dc.l    $00000000
  2544.  
  2545.     dc.l    $80080040,"_"
  2546.     dc.l    $00000000
  2547.  
  2548.     dc.l    $80080040,"_"
  2549.     dc.l    $00000000
  2550.  
  2551.     dc.l    $80080040,"_"
  2552.     dc.l    $00000000
  2553.  
  2554.     dc.l    $80080040,"_"
  2555.     dc.l    $00000000
  2556.  
  2557.     dc.l    $80080040,"_"
  2558.     dc.l    $00000000
  2559.  
  2560.     dc.l    $80080040,"_"
  2561.     dc.l    $00000000
  2562.  
  2563.     dc.l    $80080040,"_"
  2564.     dc.l    $00000000
  2565.  
  2566. gadget0txt    dc.b    "_Bootblock",0    ; gadget`s texts
  2567.     even
  2568. gadget1txt    dc.b    "_FileSys",0
  2569.     even
  2570. gadget2txt    dc.b    "DF_0",0
  2571.     even
  2572. gadget3txt    dc.b    "DF_1",0
  2573.     even
  2574. gadget4txt    dc.b    "DF_2",0
  2575.     even
  2576. gadget5txt    dc.b    "DF_3",0
  2577.     even
  2578.  
  2579. gad0_lab    dc.l    0,0,0,0,0,0,0    ; labels for both CycleGads
  2580.  
  2581. gad1_lab    dc.l    gad1lab0
  2582.     dc.l    gad1lab1
  2583.     dc.l    gad1lab2
  2584.     dc.l    gad1lab3
  2585.     dc.l    gad1lab4
  2586.     dc.l    gad1lab5
  2587.     dc.l    0
  2588.  
  2589. gad1lab0    dc.b    "OFS",0
  2590.     even
  2591. gad1lab1    dc.b    "FFS",0
  2592.     even
  2593. gad1lab2    dc.b    "OFS int",0
  2594.     even
  2595. gad1lab3    dc.b    "FFS int",0
  2596.     even
  2597. gad1lab4    dc.b    "DC-OFS",0
  2598.     even
  2599. gad1lab5    dc.b    "DC-FFS",0
  2600.     even
  2601.  
  2602. window_tags            ; tags for window...
  2603.  
  2604. tag_left    dc.l    $80000064,0
  2605. tag_top    dc.l    $80000065,0
  2606. tag_width    dc.l    $80000066,0
  2607. tag_height    dc.l    $80000067,0
  2608.     dc.l    $8000006A,$00200244
  2609.     dc.l    $8000006B,$0001100E
  2610.     dc.l    $8000006E,wnd_title
  2611.     dc.l    $8000006F,scr_title
  2612. tag_screen    dc.l    $80000079,0
  2613.     dc.l    $00000000
  2614.  
  2615. wnd_title    dc.b    "xInstall v1.4   © 1994 by Jens Tröger",0
  2616.     even
  2617.  
  2618. scr_title    dc.b    "xInstall v1.4",0
  2619.     even
  2620.  
  2621. ; -----  the localized texts
  2622. ; -----  (the catalog was created with MakeCat 38.05)
  2623.  
  2624. ; -----  Are there more trackdisk-errors I do not know ?? These are Kick 1.3
  2625. ; -----  errors, the new I did not found anywhere !!! Can somebody help me ?
  2626.  
  2627. LOCALE_START
  2628. ;    CATALOG    xinstall
  2629. ;    VERSION    1.4
  2630. ;    CATDATE    30.09.94
  2631.  
  2632. err_txt1    dc.b    "Cannot open trackdisk.device",0
  2633. ; D    "Kann trackdisk.device nicht öffnen",0
  2634.  
  2635. err_txt2    dc.b    "TDError #20: Error not specified",0
  2636. ; D    "TDFehler #20: Fehler nicht spezifizierbar",0
  2637.     
  2638. err_txt3    dc.b    "TDError #21: No Sector-Header",0
  2639. ; D    "TDFehler #21: Sektor-Kopf nicht gefunden",0
  2640.  
  2641. err_txt4    dc.b    "TDError #22: Bad Sector Preamble",0
  2642. ; D    "TDFehler #22: Fehler in Sektor-Präambel",0
  2643.  
  2644. err_txt5    dc.b    "TDError #23: Bad Sector ID",0
  2645. ; D    "TDFehler #23: Fehler in Sektor-ID",0
  2646.  
  2647. err_txt6    dc.b    "TDError #24: Bad Header CheckSumm",0
  2648. ; D    "TDFehler #24: Checksummen-Fehler im Header",0
  2649.  
  2650. err_txt7    dc.b    "TDError #25: Bad Sector CheckSumm",0
  2651. ; D    "TDFehler #25: Checksummen-Fehler im Sektor",0
  2652.  
  2653. err_txt8    dc.b    "TDError #26: Too few Sectors",0
  2654. ; D    "TDFehler #26: Zuwenige Sektoren auf Track",0
  2655.  
  2656. err_txt9    dc.b    "TDError #27: Bad Sector Header",0
  2657. ; D    "TDFehler #27: Sektor-Kopf nicht lesbar",0
  2658.  
  2659. err_txt10    dc.b    "TDError #28: Disk write protected",0
  2660. ; D    "TDFehler #29: Diskette ist schreibgeschützt",0
  2661.  
  2662. err_txt11    dc.b    "TDError #29: No Disk in drive",0
  2663. ; D    "TDFehler #29: Keine Diskette im Laufwerk",0
  2664.  
  2665. err_txt12    dc.b    "TDError #30: Seek error",0
  2666. ; D    "TDFehler #30: Lesekopf-Position falsch",0
  2667.  
  2668. err_txt13    dc.b    "TDError #31: Not enough memory",0
  2669. ; D    "TDFehler #31: Zuwenig Speicher",0
  2670.  
  2671. err_txt14    dc.b    "TDError #32: Bad unit number",0
  2672. ; D    "TDFehler #32: Laufwerk nicht angschlossen",0
  2673.  
  2674. err_txt15    dc.b    "TDError #33: Bad drive type",0
  2675. ; D    "TDFehler #33: Falsches Laufwerk",0
  2676.  
  2677. err_txt16    dc.b    "TDError #34: Drive is in use",0
  2678. ; D    "TDFehler #34: Laufwerk wird gerade benutzt",0
  2679.  
  2680. err_txt17    dc.b    "TDError #35: Post Reset done",0
  2681. ; D    "TDFehler #35: Nach Reset kein Zugriff mehr",0
  2682.  
  2683. freq_title    dc.b    "Load BootBlock-File",0
  2684. ; D    "BootBlock-Datei laden",0
  2685.  
  2686. err1_gad    dc.b    "_Yoop",0
  2687. ; D    "_Klar",0
  2688.  
  2689. err1_text    dc.b    "Can`t lock selected file.",0
  2690. ; D    "Bekomme keinen Lock() auf Datei.",0
  2691.  
  2692. err2_text    dc.b    "Can`t open selected file.",0
  2693. ; D    "Kann gewählte Datei nicht öffnen.",0
  2694.  
  2695. err3_text    dc.b    "File is not a BootBlock.",0
  2696. ; D    "Datei ist kein BootBlock.",0
  2697.  
  2698. err4_text    dc.b    "Error while reading BootBlock-File.",0
  2699. ; D    "Fehler beim Lesen der BootBlock-Datei.",0
  2700.  
  2701. fmt_text    dc.b    "Enter the Scroll-Text !!",10
  2702.     dc.b    "[max 50 chars]",0
  2703. ; D    "Bitte Fließ-Text eingeben !!",10
  2704. ; D    "[max 50 Zeichen]",0
  2705.  
  2706. funny_msg1    dc.b    10,$9b,"1mxInstall v1.4"
  2707.     dc.b    $9b,"0m  (c) 1994 by Jens Tröger. All rights reserved.",10,10
  2708.     dc.b    "ignoring all arguments... opening GUI... ",0
  2709. ; D        10,$9b,"1mxInstall v1.4",$9b,"0m  (c) 1994 by Jens Tröger. Alle Rechte vorbehalten.",10,10
  2710. ; D        "ignoriere alle Argumente... öffne GUI... ",0
  2711.  
  2712. funny_msg2    dc.b    "hard work done.",10,"Quitting away now - bye !",10,10,0
  2713. ; D    "harte Arbeit getan.",10,"Verkrümle mich jetzt - tschüß !",10,10,0
  2714.  
  2715. gadget6txt    dc.b    "_Read",0
  2716. ; D    "_Lesen",0
  2717.  
  2718. gadget7txt    dc.b    "_Load",0
  2719. ; D    "L_aden",0
  2720.  
  2721. gadget8txt    dc.b    "_Show",0
  2722. ; D    "_Zeige",0
  2723.  
  2724. gadget9txt    dc.b    "_About",0
  2725. ; D    "_Über",0
  2726.  
  2727. bb1_text    dc.b    "Empty",0
  2728. ; D    "Leer",0
  2729.  
  2730. bb2_text    dc.b    "Standard",0
  2731. ; D    "Standard",0
  2732.  
  2733. bb3_text    dc.b    "Message",0
  2734. ; D    "Botschaft",0
  2735.  
  2736. bb4_text    dc.b    "Scroller",0
  2737. ; D    "Fließtext",0
  2738.  
  2739. bb5_text    dc.b    "MemCheck",0
  2740. ; D    "SysTest",0
  2741.  
  2742. bb6_text    dc.b    "[Buffer]",0
  2743. ; D    "[Puffer]",0
  2744.  
  2745. show_text    dc.b    "Bootblock:               ",10
  2746.     dc.b    "FileSys:                 ",10
  2747.     dc.b    "CheckSum:                ",10,0
  2748. ; D    "Bootblock:               ",10
  2749. ; D    "FileSys:                 ",10
  2750. ; D    "CheckSumme:              ",10,0
  2751.  
  2752. show_gads    dc.b    " _Install | _Cancel ",0
  2753. ; D    " _Installieren | _Abbruch ",0
  2754.  
  2755. about_text    dc.b    "xInstall v1.4",10
  2756.     dc.b    "(c) 1994 by Jens Tröger",10,10
  2757.     dc.b    "This is Freeware.",10,10
  2758.     dc.b    "Greets to:",10
  2759.     dc.b    "PackMAN",10
  2760.     dc.b    "Jan van den Baard",10
  2761.     dc.b    "Oliver Reiff",10
  2762.     dc.b    "Holger Gzella",10,10
  2763.     dc.b    "xInstall`s Layout created",10
  2764.     dc.b    "with GadToolsBox.",0
  2765.  
  2766. ; D    "xInstall v1.4",10
  2767. ; D    "(c) 1994 by Jens Tröger",10,10
  2768. ; D    "Das Programm ist Freeware.",10,10
  2769. ; D    "Grüße an:",10
  2770. ; D    "PackMAN",10
  2771. ; D    "Jan van den Baard",10
  2772. ; D    "Oliver Reiff",10
  2773. ; D    "Holger Gzella",10,10
  2774. ; D    "xInstall`s Oberfläche erstellt",10
  2775. ; D    "mit GadToolsBox.",0
  2776.  
  2777. LOCALE_END
  2778.  
  2779.     end
  2780.